(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
(function (Buffer){(function (){
/*
MAVLink protocol implementation for node.js (auto-generated by mavgen_javascript.py)

Generated from: swarm.xml,common.xml

Note: this file has been auto-generated. DO NOT EDIT
*/

jspack = require("jspack").jspack,
    _ = require("underscore"),
    events = require("events"),
    util = require("util");

// Add a convenience method to Buffer
Buffer.prototype.toByteArray = function () {
  return Array.prototype.slice.call(this, 0)
}

mavlink10 = function(){};

// Implement the CRC-16/MCRF4XX function (present in the Python version through the mavutil.py package)
mavlink10.x25Crc = function(buffer, crcIN) {

    var bytes = buffer;
    var crcOUT = crcIN || 0xffff;
    _.each(bytes, function(e) {
        var tmp = e ^ (crcOUT & 0xff);
        tmp = (tmp ^ (tmp << 4)) & 0xff;
        crcOUT = (crcOUT >> 8) ^ (tmp << 8) ^ (tmp << 3) ^ (tmp >> 4);
        crcOUT = crcOUT & 0xffff;
    });
    return crcOUT;

}

mavlink10.WIRE_PROTOCOL_VERSION = "1.0";
mavlink10.HEADER_LEN = 6;

mavlink10.MAVLINK_TYPE_CHAR     = 0
mavlink10.MAVLINK_TYPE_UINT8_T  = 1
mavlink10.MAVLINK_TYPE_INT8_T   = 2
mavlink10.MAVLINK_TYPE_UINT16_T = 3
mavlink10.MAVLINK_TYPE_INT16_T  = 4
mavlink10.MAVLINK_TYPE_UINT32_T = 5
mavlink10.MAVLINK_TYPE_INT32_T  = 6
mavlink10.MAVLINK_TYPE_UINT64_T = 7
mavlink10.MAVLINK_TYPE_INT64_T  = 8
mavlink10.MAVLINK_TYPE_FLOAT    = 9
mavlink10.MAVLINK_TYPE_DOUBLE   = 10

mavlink10.MAVLINK_IFLAG_SIGNED = 0x01

// Mavlink headers incorporate sequence, source system (platform) and source component. 
mavlink10.header = function(msgId, mlen, seq, srcSystem, srcComponent, incompat_flags=0, compat_flags=0,) {

    this.mlen = ( typeof mlen === 'undefined' ) ? 0 : mlen;
    this.seq = ( typeof seq === 'undefined' ) ? 0 : seq;
    this.srcSystem = ( typeof srcSystem === 'undefined' ) ? 0 : srcSystem;
    this.srcComponent = ( typeof srcComponent === 'undefined' ) ? 0 : srcComponent;
    this.msgId = msgId
    this.incompat_flags = incompat_flags
    this.compat_flags = compat_flags

}

mavlink10.header.prototype.pack = function() {
    return jspack.Pack('BBBBBB', [254, this.mlen, this.seq, this.srcSystem, this.srcComponent, this.msgId]);
}
        
// Base class declaration: mavlink.message will be the parent class for each
// concrete implementation in mavlink.messages.
mavlink10.message = function() {};

// Convenience setter to facilitate turning the unpacked array of data into member properties
mavlink10.message.prototype.set = function(args) {
    _.each(this.fieldnames, function(e, i) {
        this[e] = args[i];
    }, this);
};

// This pack function builds the header and produces a complete MAVLink message,
// including header and message CRC.
mavlink10.message.prototype.pack = function(mav, crc_extra, payload) {

    this.payload = payload;
    var plen = this.payload.length;
    var incompat_flags = 0;
    this.header = new mavlink10.header(this.id, this.payload.length, mav.seq, mav.srcSystem, mav.srcComponent, incompat_flags, 0,);    
    this.msgbuf = this.header.pack().concat(this.payload);
    var crc = mavlink10.x25Crc(this.msgbuf.slice(1));

    // For now, assume always using crc_extra = True.  TODO: check/fix this.
    crc = mavlink10.x25Crc([crc_extra], crc);
    this.msgbuf = this.msgbuf.concat(jspack.Pack('<H', [crc] ) );
    return this.msgbuf;

}


// enums

// MAV_AUTOPILOT
mavlink10.MAV_AUTOPILOT_GENERIC = 0 // Generic autopilot, full support for everything
mavlink10.MAV_AUTOPILOT_RESERVED = 1 // Reserved for future use.
mavlink10.MAV_AUTOPILOT_SLUGS = 2 // SLUGS autopilot, http://slugsuav.soe.ucsc.edu
mavlink10.MAV_AUTOPILOT_ARDUPILOTMEGA = 3 // ArduPilotMega / ArduCopter, http://diydrones.com
mavlink10.MAV_AUTOPILOT_OPENPILOT = 4 // OpenPilot, http://openpilot.org
mavlink10.MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY = 5 // Generic autopilot only supporting simple waypoints
mavlink10.MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY = 6 // Generic autopilot supporting waypoints and other simple navigation
                        // commands
mavlink10.MAV_AUTOPILOT_GENERIC_MISSION_FULL = 7 // Generic autopilot supporting the full mission command set
mavlink10.MAV_AUTOPILOT_INVALID = 8 // No valid autopilot, e.g. a GCS or other MAVLink component
mavlink10.MAV_AUTOPILOT_PPZ = 9 // PPZ UAV - http://nongnu.org/paparazzi
mavlink10.MAV_AUTOPILOT_UDB = 10 // UAV Dev Board
mavlink10.MAV_AUTOPILOT_FP = 11 // FlexiPilot
mavlink10.MAV_AUTOPILOT_PX4 = 12 // PX4 Autopilot - http://pixhawk.ethz.ch/px4/
mavlink10.MAV_AUTOPILOT_SMACCMPILOT = 13 // SMACCMPilot - http://smaccmpilot.org
mavlink10.MAV_AUTOPILOT_AUTOQUAD = 14 // AutoQuad -- http://autoquad.org
mavlink10.MAV_AUTOPILOT_ARMAZILA = 15 // Armazila -- http://armazila.com
mavlink10.MAV_AUTOPILOT_AEROB = 16 // Aerob -- http://aerob.ru
mavlink10.MAV_AUTOPILOT_ASLUAV = 17 // ASLUAV autopilot -- http://www.asl.ethz.ch
mavlink10.MAV_AUTOPILOT_SMARTAP = 18 // SmartAP Autopilot - http://sky-drones.com
mavlink10.MAV_AUTOPILOT_AIRRAILS = 19 // AirRails - http://uaventure.com
mavlink10.MAV_AUTOPILOT_ENUM_END = 20 // 

// MAV_TYPE
mavlink10.MAV_TYPE_GENERIC = 0 // Generic micro air vehicle.
mavlink10.MAV_TYPE_FIXED_WING = 1 // Fixed wing aircraft.
mavlink10.MAV_TYPE_QUADROTOR = 2 // Quadrotor
mavlink10.MAV_TYPE_COAXIAL = 3 // Coaxial helicopter
mavlink10.MAV_TYPE_HELICOPTER = 4 // Normal helicopter with tail rotor.
mavlink10.MAV_TYPE_ANTENNA_TRACKER = 5 // Ground installation
mavlink10.MAV_TYPE_GCS = 6 // Operator control unit / ground control station
mavlink10.MAV_TYPE_AIRSHIP = 7 // Airship, controlled
mavlink10.MAV_TYPE_FREE_BALLOON = 8 // Free balloon, uncontrolled
mavlink10.MAV_TYPE_ROCKET = 9 // Rocket
mavlink10.MAV_TYPE_GROUND_ROVER = 10 // Ground rover
mavlink10.MAV_TYPE_SURFACE_BOAT = 11 // Surface vessel, boat, ship
mavlink10.MAV_TYPE_SUBMARINE = 12 // Submarine
mavlink10.MAV_TYPE_HEXAROTOR = 13 // Hexarotor
mavlink10.MAV_TYPE_OCTOROTOR = 14 // Octorotor
mavlink10.MAV_TYPE_TRICOPTER = 15 // Tricopter
mavlink10.MAV_TYPE_FLAPPING_WING = 16 // Flapping wing
mavlink10.MAV_TYPE_KITE = 17 // Kite
mavlink10.MAV_TYPE_ONBOARD_CONTROLLER = 18 // Onboard companion controller
mavlink10.MAV_TYPE_VTOL_DUOROTOR = 19 // Two-rotor VTOL using control surfaces in vertical operation in
                        // addition. Tailsitter.
mavlink10.MAV_TYPE_VTOL_QUADROTOR = 20 // Quad-rotor VTOL using a V-shaped quad config in vertical operation.
                        // Tailsitter.
mavlink10.MAV_TYPE_VTOL_TILTROTOR = 21 // Tiltrotor VTOL
mavlink10.MAV_TYPE_VTOL_RESERVED2 = 22 // VTOL reserved 2
mavlink10.MAV_TYPE_VTOL_RESERVED3 = 23 // VTOL reserved 3
mavlink10.MAV_TYPE_VTOL_RESERVED4 = 24 // VTOL reserved 4
mavlink10.MAV_TYPE_VTOL_RESERVED5 = 25 // VTOL reserved 5
mavlink10.MAV_TYPE_GIMBAL = 26 // Onboard gimbal
mavlink10.MAV_TYPE_ADSB = 27 // Onboard ADSB peripheral
mavlink10.MAV_TYPE_PARAFOIL = 28 // Steerable, nonrigid airfoil
mavlink10.MAV_TYPE_DODECAROTOR = 29 // Dodecarotor
mavlink10.MAV_TYPE_CAMERA = 30 // Camera
mavlink10.MAV_TYPE_CHARGING_STATION = 31 // Charging station
mavlink10.MAV_TYPE_FLARM = 32 // Onboard FLARM collision avoidance system
mavlink10.MAV_TYPE_ENUM_END = 33 // 

// FIRMWARE_VERSION_TYPE
mavlink10.FIRMWARE_VERSION_TYPE_DEV = 0 // development release
mavlink10.FIRMWARE_VERSION_TYPE_ALPHA = 64 // alpha release
mavlink10.FIRMWARE_VERSION_TYPE_BETA = 128 // beta release
mavlink10.FIRMWARE_VERSION_TYPE_RC = 192 // release candidate
mavlink10.FIRMWARE_VERSION_TYPE_OFFICIAL = 255 // official stable release
mavlink10.FIRMWARE_VERSION_TYPE_ENUM_END = 256 // 

// HL_FAILURE_FLAG
mavlink10.HL_FAILURE_FLAG_GPS = 1 // GPS failure.
mavlink10.HL_FAILURE_FLAG_DIFFERENTIAL_PRESSURE = 2 // Differential pressure sensor failure.
mavlink10.HL_FAILURE_FLAG_ABSOLUTE_PRESSURE = 4 // Absolute pressure sensor failure.
mavlink10.HL_FAILURE_FLAG_3D_ACCEL = 8 // Accelerometer sensor failure.
mavlink10.HL_FAILURE_FLAG_3D_GYRO = 16 // Gyroscope sensor failure.
mavlink10.HL_FAILURE_FLAG_3D_MAG = 32 // Magnetometer sensor failure.
mavlink10.HL_FAILURE_FLAG_TERRAIN = 64 // Terrain subsystem failure.
mavlink10.HL_FAILURE_FLAG_BATTERY = 128 // Battery failure/critical low battery.
mavlink10.HL_FAILURE_FLAG_RC_RECEIVER = 256 // RC receiver failure/no rc connection.
mavlink10.HL_FAILURE_FLAG_OFFBOARD_LINK = 512 // Offboard link failure.
mavlink10.HL_FAILURE_FLAG_ENGINE = 1024 // Engine failure.
mavlink10.HL_FAILURE_FLAG_GEOFENCE = 2048 // Geofence violation.
mavlink10.HL_FAILURE_FLAG_ESTIMATOR = 4096 // Estimator failure, for example measurement rejection or large
                        // variances.
mavlink10.HL_FAILURE_FLAG_MISSION = 8192 // Mission failure.
mavlink10.HL_FAILURE_FLAG_ENUM_END = 8193 // 

// MAV_MODE_FLAG
mavlink10.MAV_MODE_FLAG_CUSTOM_MODE_ENABLED = 1 // 0b00000001 Reserved for future use.
mavlink10.MAV_MODE_FLAG_TEST_ENABLED = 2 // 0b00000010 system has a test mode enabled. This flag is intended for
                        // temporary system tests and should not be
                        // used for stable implementations.
mavlink10.MAV_MODE_FLAG_AUTO_ENABLED = 4 // 0b00000100 autonomous mode enabled, system finds its own goal
                        // positions. Guided flag can be set or not,
                        // depends on the actual implementation.
mavlink10.MAV_MODE_FLAG_GUIDED_ENABLED = 8 // 0b00001000 guided mode enabled, system flies waypoints / mission
                        // items.
mavlink10.MAV_MODE_FLAG_STABILIZE_ENABLED = 16 // 0b00010000 system stabilizes electronically its attitude (and
                        // optionally position). It needs however
                        // further control inputs to move around.
mavlink10.MAV_MODE_FLAG_HIL_ENABLED = 32 // 0b00100000 hardware in the loop simulation. All motors / actuators are
                        // blocked, but internal software is full
                        // operational.
mavlink10.MAV_MODE_FLAG_MANUAL_INPUT_ENABLED = 64 // 0b01000000 remote control input is enabled.
mavlink10.MAV_MODE_FLAG_SAFETY_ARMED = 128 // 0b10000000 MAV safety set to armed. Motors are enabled / running / can
                        // start. Ready to fly. Additional note: this
                        // flag is to be ignore when sent in the
                        // command MAV_CMD_DO_SET_MODE and
                        // MAV_CMD_COMPONENT_ARM_DISARM shall be used
                        // instead. The flag can still be used to
                        // report the armed state.
mavlink10.MAV_MODE_FLAG_ENUM_END = 129 // 

// MAV_MODE_FLAG_DECODE_POSITION
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_CUSTOM_MODE = 1 // Eighth bit: 00000001
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_TEST = 2 // Seventh bit: 00000010
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_AUTO = 4 // Sixt bit:   00000100
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_GUIDED = 8 // Fifth bit:  00001000
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_STABILIZE = 16 // Fourth bit: 00010000
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_HIL = 32 // Third bit:  00100000
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_MANUAL = 64 // Second bit: 01000000
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_SAFETY = 128 // First bit:  10000000
mavlink10.MAV_MODE_FLAG_DECODE_POSITION_ENUM_END = 129 // 

// MAV_GOTO
mavlink10.MAV_GOTO_DO_HOLD = 0 // Hold at the current position.
mavlink10.MAV_GOTO_DO_CONTINUE = 1 // Continue with the next item in mission execution.
mavlink10.MAV_GOTO_HOLD_AT_CURRENT_POSITION = 2 // Hold at the current position of the system
mavlink10.MAV_GOTO_HOLD_AT_SPECIFIED_POSITION = 3 // Hold at the position specified in the parameters of the DO_HOLD action
mavlink10.MAV_GOTO_ENUM_END = 4 // 

// MAV_MODE
mavlink10.MAV_MODE_PREFLIGHT = 0 // System is not ready to fly, booting, calibrating, etc. No flag is set.
mavlink10.MAV_MODE_MANUAL_DISARMED = 64 // System is allowed to be active, under manual (RC) control, no
                        // stabilization
mavlink10.MAV_MODE_TEST_DISARMED = 66 // UNDEFINED mode. This solely depends on the autopilot - use with
                        // caution, intended for developers only.
mavlink10.MAV_MODE_STABILIZE_DISARMED = 80 // System is allowed to be active, under assisted RC control.
mavlink10.MAV_MODE_GUIDED_DISARMED = 88 // System is allowed to be active, under autonomous control, manual
                        // setpoint
mavlink10.MAV_MODE_AUTO_DISARMED = 92 // System is allowed to be active, under autonomous control and
                        // navigation (the trajectory is decided
                        // onboard and not pre-programmed by
                        // waypoints)
mavlink10.MAV_MODE_MANUAL_ARMED = 192 // System is allowed to be active, under manual (RC) control, no
                        // stabilization
mavlink10.MAV_MODE_TEST_ARMED = 194 // UNDEFINED mode. This solely depends on the autopilot - use with
                        // caution, intended for developers only.
mavlink10.MAV_MODE_STABILIZE_ARMED = 208 // System is allowed to be active, under assisted RC control.
mavlink10.MAV_MODE_GUIDED_ARMED = 216 // System is allowed to be active, under autonomous control, manual
                        // setpoint
mavlink10.MAV_MODE_AUTO_ARMED = 220 // System is allowed to be active, under autonomous control and
                        // navigation (the trajectory is decided
                        // onboard and not pre-programmed by
                        // waypoints)
mavlink10.MAV_MODE_ENUM_END = 221 // 

// MAV_STATE
mavlink10.MAV_STATE_UNINIT = 0 // Uninitialized system, state is unknown.
mavlink10.MAV_STATE_BOOT = 1 // System is booting up.
mavlink10.MAV_STATE_CALIBRATING = 2 // System is calibrating and not flight-ready.
mavlink10.MAV_STATE_STANDBY = 3 // System is grounded and on standby. It can be launched any time.
mavlink10.MAV_STATE_ACTIVE = 4 // System is active and might be already airborne. Motors are engaged.
mavlink10.MAV_STATE_CRITICAL = 5 // System is in a non-normal flight mode. It can however still navigate.
mavlink10.MAV_STATE_EMERGENCY = 6 // System is in a non-normal flight mode. It lost control over parts or
                        // over the whole airframe. It is in mayday
                        // and going down.
mavlink10.MAV_STATE_POWEROFF = 7 // System just initialized its power-down sequence, will shut down now.
mavlink10.MAV_STATE_FLIGHT_TERMINATION = 8 // System is terminating itself.
mavlink10.MAV_STATE_ENUM_END = 9 // 

// MAV_COMPONENT
mavlink10.MAV_COMP_ID_ALL = 0 // 
mavlink10.MAV_COMP_ID_AUTOPILOT1 = 1 // 
mavlink10.MAV_COMP_ID_CAMERA = 100 // 
mavlink10.MAV_COMP_ID_CAMERA2 = 101 // 
mavlink10.MAV_COMP_ID_CAMERA3 = 102 // 
mavlink10.MAV_COMP_ID_CAMERA4 = 103 // 
mavlink10.MAV_COMP_ID_CAMERA5 = 104 // 
mavlink10.MAV_COMP_ID_CAMERA6 = 105 // 
mavlink10.MAV_COMP_ID_SERVO1 = 140 // 
mavlink10.MAV_COMP_ID_SERVO2 = 141 // 
mavlink10.MAV_COMP_ID_SERVO3 = 142 // 
mavlink10.MAV_COMP_ID_SERVO4 = 143 // 
mavlink10.MAV_COMP_ID_SERVO5 = 144 // 
mavlink10.MAV_COMP_ID_SERVO6 = 145 // 
mavlink10.MAV_COMP_ID_SERVO7 = 146 // 
mavlink10.MAV_COMP_ID_SERVO8 = 147 // 
mavlink10.MAV_COMP_ID_SERVO9 = 148 // 
mavlink10.MAV_COMP_ID_SERVO10 = 149 // 
mavlink10.MAV_COMP_ID_SERVO11 = 150 // 
mavlink10.MAV_COMP_ID_SERVO12 = 151 // 
mavlink10.MAV_COMP_ID_SERVO13 = 152 // 
mavlink10.MAV_COMP_ID_SERVO14 = 153 // 
mavlink10.MAV_COMP_ID_GIMBAL = 154 // 
mavlink10.MAV_COMP_ID_LOG = 155 // 
mavlink10.MAV_COMP_ID_ADSB = 156 // 
mavlink10.MAV_COMP_ID_OSD = 157 // On Screen Display (OSD) devices for video links
mavlink10.MAV_COMP_ID_PERIPHERAL = 158 // Generic autopilot peripheral component ID. Meant for devices that do
                        // not implement the parameter sub-protocol
mavlink10.MAV_COMP_ID_QX1_GIMBAL = 159 // 
mavlink10.MAV_COMP_ID_FLARM = 160 // 
mavlink10.MAV_COMP_ID_MAPPER = 180 // 
mavlink10.MAV_COMP_ID_MISSIONPLANNER = 190 // 
mavlink10.MAV_COMP_ID_PATHPLANNER = 195 // 
mavlink10.MAV_COMP_ID_IMU = 200 // 
mavlink10.MAV_COMP_ID_IMU_2 = 201 // 
mavlink10.MAV_COMP_ID_IMU_3 = 202 // 
mavlink10.MAV_COMP_ID_GPS = 220 // 
mavlink10.MAV_COMP_ID_GPS2 = 221 // 
mavlink10.MAV_COMP_ID_UDP_BRIDGE = 240 // 
mavlink10.MAV_COMP_ID_UART_BRIDGE = 241 // 
mavlink10.MAV_COMP_ID_SYSTEM_CONTROL = 250 // 
mavlink10.MAV_COMPONENT_ENUM_END = 251 // 

// MAV_SYS_STATUS_SENSOR
mavlink10.MAV_SYS_STATUS_SENSOR_3D_GYRO = 1 // 0x01 3D gyro
mavlink10.MAV_SYS_STATUS_SENSOR_3D_ACCEL = 2 // 0x02 3D accelerometer
mavlink10.MAV_SYS_STATUS_SENSOR_3D_MAG = 4 // 0x04 3D magnetometer
mavlink10.MAV_SYS_STATUS_SENSOR_ABSOLUTE_PRESSURE = 8 // 0x08 absolute pressure
mavlink10.MAV_SYS_STATUS_SENSOR_DIFFERENTIAL_PRESSURE = 16 // 0x10 differential pressure
mavlink10.MAV_SYS_STATUS_SENSOR_GPS = 32 // 0x20 GPS
mavlink10.MAV_SYS_STATUS_SENSOR_OPTICAL_FLOW = 64 // 0x40 optical flow
mavlink10.MAV_SYS_STATUS_SENSOR_VISION_POSITION = 128 // 0x80 computer vision position
mavlink10.MAV_SYS_STATUS_SENSOR_LASER_POSITION = 256 // 0x100 laser based position
mavlink10.MAV_SYS_STATUS_SENSOR_EXTERNAL_GROUND_TRUTH = 512 // 0x200 external ground truth (Vicon or Leica)
mavlink10.MAV_SYS_STATUS_SENSOR_ANGULAR_RATE_CONTROL = 1024 // 0x400 3D angular rate control
mavlink10.MAV_SYS_STATUS_SENSOR_ATTITUDE_STABILIZATION = 2048 // 0x800 attitude stabilization
mavlink10.MAV_SYS_STATUS_SENSOR_YAW_POSITION = 4096 // 0x1000 yaw position
mavlink10.MAV_SYS_STATUS_SENSOR_Z_ALTITUDE_CONTROL = 8192 // 0x2000 z/altitude control
mavlink10.MAV_SYS_STATUS_SENSOR_XY_POSITION_CONTROL = 16384 // 0x4000 x/y position control
mavlink10.MAV_SYS_STATUS_SENSOR_MOTOR_OUTPUTS = 32768 // 0x8000 motor outputs / control
mavlink10.MAV_SYS_STATUS_SENSOR_RC_RECEIVER = 65536 // 0x10000 rc receiver
mavlink10.MAV_SYS_STATUS_SENSOR_3D_GYRO2 = 131072 // 0x20000 2nd 3D gyro
mavlink10.MAV_SYS_STATUS_SENSOR_3D_ACCEL2 = 262144 // 0x40000 2nd 3D accelerometer
mavlink10.MAV_SYS_STATUS_SENSOR_3D_MAG2 = 524288 // 0x80000 2nd 3D magnetometer
mavlink10.MAV_SYS_STATUS_GEOFENCE = 1048576 // 0x100000 geofence
mavlink10.MAV_SYS_STATUS_AHRS = 2097152 // 0x200000 AHRS subsystem health
mavlink10.MAV_SYS_STATUS_TERRAIN = 4194304 // 0x400000 Terrain subsystem health
mavlink10.MAV_SYS_STATUS_REVERSE_MOTOR = 8388608 // 0x800000 Motors are reversed
mavlink10.MAV_SYS_STATUS_LOGGING = 16777216 // 0x1000000 Logging
mavlink10.MAV_SYS_STATUS_SENSOR_BATTERY = 33554432 // 0x2000000 Battery
mavlink10.MAV_SYS_STATUS_SENSOR_PROXIMITY = 67108864 // 0x4000000 Proximity
mavlink10.MAV_SYS_STATUS_SENSOR_SATCOM = 134217728 // 0x8000000 Satellite Communication
mavlink10.MAV_SYS_STATUS_SENSOR_ENUM_END = 134217729 // 

// MAV_FRAME
mavlink10.MAV_FRAME_GLOBAL = 0 // Global coordinate frame, WGS84 coordinate system. First value / x:
                        // latitude, second value / y: longitude,
                        // third value / z: positive altitude over
                        // mean sea level (MSL).
mavlink10.MAV_FRAME_LOCAL_NED = 1 // Local coordinate frame, Z-down (x: north, y: east, z: down).
mavlink10.MAV_FRAME_MISSION = 2 // NOT a coordinate frame, indicates a mission command.
mavlink10.MAV_FRAME_GLOBAL_RELATIVE_ALT = 3 // Global coordinate frame, WGS84 coordinate system, relative altitude
                        // over ground with respect to the home
                        // position. First value / x: latitude, second
                        // value / y: longitude, third value / z:
                        // positive altitude with 0 being at the
                        // altitude of the home location.
mavlink10.MAV_FRAME_LOCAL_ENU = 4 // Local coordinate frame, Z-up (x: east, y: north, z: up).
mavlink10.MAV_FRAME_GLOBAL_INT = 5 // Global coordinate frame, WGS84 coordinate system. First value / x:
                        // latitude in degrees*1.0e-7, second value /
                        // y: longitude in degrees*1.0e-7, third value
                        // / z: positive altitude over mean sea level
                        // (MSL).
mavlink10.MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6 // Global coordinate frame, WGS84 coordinate system, relative altitude
                        // over ground with respect to the home
                        // position. First value / x: latitude in
                        // degrees*10e-7, second value / y: longitude
                        // in degrees*10e-7, third value / z: positive
                        // altitude with 0 being at the altitude of
                        // the home location.
mavlink10.MAV_FRAME_LOCAL_OFFSET_NED = 7 // Offset to the current local frame. Anything expressed in this frame
                        // should be added to the current local frame
                        // position.
mavlink10.MAV_FRAME_BODY_NED = 8 // Setpoint in body NED frame. This makes sense if all position control
                        // is externalized - e.g. useful to command 2
                        // m/s^2 acceleration to the right.
mavlink10.MAV_FRAME_BODY_OFFSET_NED = 9 // Offset in body NED frame. This makes sense if adding setpoints to the
                        // current flight path, to avoid an obstacle -
                        // e.g. useful to command 2 m/s^2 acceleration
                        // to the east.
mavlink10.MAV_FRAME_GLOBAL_TERRAIN_ALT = 10 // Global coordinate frame with above terrain level altitude. WGS84
                        // coordinate system, relative altitude over
                        // terrain with respect to the waypoint
                        // coordinate. First value / x: latitude in
                        // degrees, second value / y: longitude in
                        // degrees, third value / z: positive altitude
                        // in meters with 0 being at ground level in
                        // terrain model.
mavlink10.MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 // Global coordinate frame with above terrain level altitude. WGS84
                        // coordinate system, relative altitude over
                        // terrain with respect to the waypoint
                        // coordinate. First value / x: latitude in
                        // degrees*10e-7, second value / y: longitude
                        // in degrees*10e-7, third value / z: positive
                        // altitude in meters with 0 being at ground
                        // level in terrain model.
mavlink10.MAV_FRAME_BODY_FRD = 12 // Body fixed frame of reference, Z-down (x: forward, y: right, z: down).
mavlink10.MAV_FRAME_BODY_FLU = 13 // Body fixed frame of reference, Z-up (x: forward, y: left, z: up).
mavlink10.MAV_FRAME_MOCAP_NED = 14 // Odometry local coordinate frame of data given by a motion capture
                        // system, Z-down (x: north, y: east, z:
                        // down).
mavlink10.MAV_FRAME_MOCAP_ENU = 15 // Odometry local coordinate frame of data given by a motion capture
                        // system, Z-up (x: east, y: north, z: up).
mavlink10.MAV_FRAME_VISION_NED = 16 // Odometry local coordinate frame of data given by a vision estimation
                        // system, Z-down (x: north, y: east, z:
                        // down).
mavlink10.MAV_FRAME_VISION_ENU = 17 // Odometry local coordinate frame of data given by a vision estimation
                        // system, Z-up (x: east, y: north, z: up).
mavlink10.MAV_FRAME_ESTIM_NED = 18 // Odometry local coordinate frame of data given by an estimator running
                        // onboard the vehicle, Z-down (x: north, y:
                        // east, z: down).
mavlink10.MAV_FRAME_ESTIM_ENU = 19 // Odometry local coordinate frame of data given by an estimator running
                        // onboard the vehicle, Z-up (x: east, y:
                        // noth, z: up).
mavlink10.MAV_FRAME_ENUM_END = 20 // 

// MAVLINK_DATA_STREAM_TYPE
mavlink10.MAVLINK_DATA_STREAM_IMG_JPEG = 1 // 
mavlink10.MAVLINK_DATA_STREAM_IMG_BMP = 2 // 
mavlink10.MAVLINK_DATA_STREAM_IMG_RAW8U = 3 // 
mavlink10.MAVLINK_DATA_STREAM_IMG_RAW32U = 4 // 
mavlink10.MAVLINK_DATA_STREAM_IMG_PGM = 5 // 
mavlink10.MAVLINK_DATA_STREAM_IMG_PNG = 6 // 
mavlink10.MAVLINK_DATA_STREAM_TYPE_ENUM_END = 7 // 

// FENCE_ACTION
mavlink10.FENCE_ACTION_NONE = 0 // Disable fenced mode
mavlink10.FENCE_ACTION_GUIDED = 1 // Switched to guided mode to return point (fence point 0)
mavlink10.FENCE_ACTION_REPORT = 2 // Report fence breach, but don't take action
mavlink10.FENCE_ACTION_GUIDED_THR_PASS = 3 // Switched to guided mode to return point (fence point 0) with manual
                        // throttle control
mavlink10.FENCE_ACTION_RTL = 4 // Switch to RTL (return to launch) mode and head for the return point.
mavlink10.FENCE_ACTION_ENUM_END = 5 // 

// FENCE_BREACH
mavlink10.FENCE_BREACH_NONE = 0 // No last fence breach
mavlink10.FENCE_BREACH_MINALT = 1 // Breached minimum altitude
mavlink10.FENCE_BREACH_MAXALT = 2 // Breached maximum altitude
mavlink10.FENCE_BREACH_BOUNDARY = 3 // Breached fence boundary
mavlink10.FENCE_BREACH_ENUM_END = 4 // 

// MAV_MOUNT_MODE
mavlink10.MAV_MOUNT_MODE_RETRACT = 0 // Load and keep safe position (Roll,Pitch,Yaw) from permant memory and
                        // stop stabilization
mavlink10.MAV_MOUNT_MODE_NEUTRAL = 1 // Load and keep neutral position (Roll,Pitch,Yaw) from permanent memory.
mavlink10.MAV_MOUNT_MODE_MAVLINK_TARGETING = 2 // Load neutral position and start MAVLink Roll,Pitch,Yaw control with
                        // stabilization
mavlink10.MAV_MOUNT_MODE_RC_TARGETING = 3 // Load neutral position and start RC Roll,Pitch,Yaw control with
                        // stabilization
mavlink10.MAV_MOUNT_MODE_GPS_POINT = 4 // Load neutral position and start to point to Lat,Lon,Alt
mavlink10.MAV_MOUNT_MODE_ENUM_END = 5 // 

// UAVCAN_NODE_HEALTH
mavlink10.UAVCAN_NODE_HEALTH_OK = 0 // The node is functioning properly.
mavlink10.UAVCAN_NODE_HEALTH_WARNING = 1 // A critical parameter went out of range or the node has encountered a
                        // minor failure.
mavlink10.UAVCAN_NODE_HEALTH_ERROR = 2 // The node has encountered a major failure.
mavlink10.UAVCAN_NODE_HEALTH_CRITICAL = 3 // The node has suffered a fatal malfunction.
mavlink10.UAVCAN_NODE_HEALTH_ENUM_END = 4 // 

// UAVCAN_NODE_MODE
mavlink10.UAVCAN_NODE_MODE_OPERATIONAL = 0 // The node is performing its primary functions.
mavlink10.UAVCAN_NODE_MODE_INITIALIZATION = 1 // The node is initializing; this mode is entered immediately after
                        // startup.
mavlink10.UAVCAN_NODE_MODE_MAINTENANCE = 2 // The node is under maintenance.
mavlink10.UAVCAN_NODE_MODE_SOFTWARE_UPDATE = 3 // The node is in the process of updating its software.
mavlink10.UAVCAN_NODE_MODE_OFFLINE = 7 // The node is no longer available online.
mavlink10.UAVCAN_NODE_MODE_ENUM_END = 8 // 

// MAV_CMD
mavlink10.MAV_CMD_NAV_WAYPOINT = 16 // Navigate to waypoint.
mavlink10.MAV_CMD_NAV_LOITER_UNLIM = 17 // Loiter around this waypoint an unlimited amount of time
mavlink10.MAV_CMD_NAV_LOITER_TURNS = 18 // Loiter around this waypoint for X turns
mavlink10.MAV_CMD_NAV_LOITER_TIME = 19 // Loiter around this waypoint for X seconds
mavlink10.MAV_CMD_NAV_RETURN_TO_LAUNCH = 20 // Return to launch location
mavlink10.MAV_CMD_NAV_LAND = 21 // Land at location
mavlink10.MAV_CMD_NAV_TAKEOFF = 22 // Takeoff from ground / hand
mavlink10.MAV_CMD_NAV_LAND_LOCAL = 23 // Land at local position (local frame only)
mavlink10.MAV_CMD_NAV_TAKEOFF_LOCAL = 24 // Takeoff from local position (local frame only)
mavlink10.MAV_CMD_NAV_FOLLOW = 25 // Vehicle following, i.e. this waypoint represents the position of a
                        // moving vehicle
mavlink10.MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT = 30 // Continue on the current course and climb/descend to specified
                        // altitude.  When the altitude is reached
                        // continue to the next command (i.e., don't
                        // proceed to the next command until the
                        // desired altitude is reached.
mavlink10.MAV_CMD_NAV_LOITER_TO_ALT = 31 // Begin loiter at the specified Latitude and Longitude.  If Lat=Lon=0,
                        // then loiter at the current position.  Don't
                        // consider the navigation command complete
                        // (don't leave loiter) until the altitude has
                        // been reached.  Additionally, if the Heading
                        // Required parameter is non-zero the
                        // aircraft will not leave the loiter until
                        // heading toward the next waypoint.
mavlink10.MAV_CMD_DO_FOLLOW = 32 // Being following a target
mavlink10.MAV_CMD_DO_FOLLOW_REPOSITION = 33 // Reposition the MAV after a follow target command has been sent
mavlink10.MAV_CMD_DO_ORBIT = 34 // Start orbiting on the circumference of a circle defined by the
                        // parameters. Setting any value NaN results
                        // in using defaults.
mavlink10.MAV_CMD_NAV_ROI = 80 // Sets the region of interest (ROI) for a sensor set or the vehicle
                        // itself. This can then be used by the
                        // vehicles control system to control the
                        // vehicle attitude and the attitude of
                        // various sensors such as cameras.
mavlink10.MAV_CMD_NAV_PATHPLANNING = 81 // Control autonomous path planning on the MAV.
mavlink10.MAV_CMD_NAV_SPLINE_WAYPOINT = 82 // Navigate to waypoint using a spline path.
mavlink10.MAV_CMD_NAV_VTOL_TAKEOFF = 84 // Takeoff from ground using VTOL mode
mavlink10.MAV_CMD_NAV_VTOL_LAND = 85 // Land using VTOL mode
mavlink10.MAV_CMD_NAV_GUIDED_ENABLE = 92 // hand control over to an external controller
mavlink10.MAV_CMD_NAV_DELAY = 93 // Delay the next navigation command a number of seconds or until a
                        // specified time
mavlink10.MAV_CMD_NAV_PAYLOAD_PLACE = 94 // Descend and place payload.  Vehicle descends until it detects a
                        // hanging payload has reached the ground, the
                        // gripper is opened to release the payload
mavlink10.MAV_CMD_NAV_LAST = 95 // NOP - This command is only used to mark the upper limit of the
                        // NAV/ACTION commands in the enumeration
mavlink10.MAV_CMD_CONDITION_DELAY = 112 // Delay mission state machine.
mavlink10.MAV_CMD_CONDITION_CHANGE_ALT = 113 // Ascend/descend at rate.  Delay mission state machine until desired
                        // altitude reached.
mavlink10.MAV_CMD_CONDITION_DISTANCE = 114 // Delay mission state machine until within desired distance of next NAV
                        // point.
mavlink10.MAV_CMD_CONDITION_YAW = 115 // Reach a certain target angle.
mavlink10.MAV_CMD_CONDITION_LAST = 159 // NOP - This command is only used to mark the upper limit of the
                        // CONDITION commands in the enumeration
mavlink10.MAV_CMD_DO_SET_MODE = 176 // Set system mode.
mavlink10.MAV_CMD_DO_JUMP = 177 // Jump to the desired command in the mission list.  Repeat this action
                        // only the specified number of times
mavlink10.MAV_CMD_DO_CHANGE_SPEED = 178 // Change speed and/or throttle set points.
mavlink10.MAV_CMD_DO_SET_HOME = 179 // Changes the home location either to the current location or a
                        // specified location.
mavlink10.MAV_CMD_DO_SET_PARAMETER = 180 // Set a system parameter.  Caution!  Use of this command requires
                        // knowledge of the numeric enumeration value
                        // of the parameter.
mavlink10.MAV_CMD_DO_SET_RELAY = 181 // Set a relay to a condition.
mavlink10.MAV_CMD_DO_REPEAT_RELAY = 182 // Cycle a relay on and off for a desired number of cycles with a desired
                        // period.
mavlink10.MAV_CMD_DO_SET_SERVO = 183 // Set a servo to a desired PWM value.
mavlink10.MAV_CMD_DO_REPEAT_SERVO = 184 // Cycle a between its nominal setting and a desired PWM for a desired
                        // number of cycles with a desired period.
mavlink10.MAV_CMD_DO_FLIGHTTERMINATION = 185 // Terminate flight immediately
mavlink10.MAV_CMD_DO_CHANGE_ALTITUDE = 186 // Change altitude set point.
mavlink10.MAV_CMD_DO_LAND_START = 189 // Mission command to perform a landing. This is used as a marker in a
                        // mission to tell the autopilot where a
                        // sequence of mission items that represents a
                        // landing starts. It may also be sent via a
                        // COMMAND_LONG to trigger a landing, in which
                        // case the nearest (geographically) landing
                        // sequence in the mission will be used. The
                        // Latitude/Longitude is optional, and may be
                        // set to 0 if not needed. If specified then
                        // it will be used to help find the closest
                        // landing sequence.
mavlink10.MAV_CMD_DO_RALLY_LAND = 190 // Mission command to perform a landing from a rally point.
mavlink10.MAV_CMD_DO_GO_AROUND = 191 // Mission command to safely abort an autonomous landing.
mavlink10.MAV_CMD_DO_REPOSITION = 192 // Reposition the vehicle to a specific WGS84 global position.
mavlink10.MAV_CMD_DO_PAUSE_CONTINUE = 193 // If in a GPS controlled position mode, hold the current position or
                        // continue.
mavlink10.MAV_CMD_DO_SET_REVERSE = 194 // Set moving direction to forward or reverse.
mavlink10.MAV_CMD_DO_SET_ROI_LOCATION = 195 // Sets the region of interest (ROI) to a location. This can then be used
                        // by the vehicles control system to control
                        // the vehicle attitude and the attitude of
                        // various sensors such as cameras.
mavlink10.MAV_CMD_DO_SET_ROI_WPNEXT_OFFSET = 196 // Sets the region of interest (ROI) to be toward next waypoint, with
                        // optional pitch/roll/yaw offset. This can
                        // then be used by the vehicles control system
                        // to control the vehicle attitude and the
                        // attitude of various sensors such as
                        // cameras.
mavlink10.MAV_CMD_DO_SET_ROI_NONE = 197 // Cancels any previous ROI command returning the vehicle/sensors to
                        // default flight characteristics. This can
                        // then be used by the vehicles control system
                        // to control the vehicle attitude and the
                        // attitude of various sensors such as
                        // cameras.
mavlink10.MAV_CMD_DO_CONTROL_VIDEO = 200 // Control onboard camera system.
mavlink10.MAV_CMD_DO_SET_ROI = 201 // Sets the region of interest (ROI) for a sensor set or the vehicle
                        // itself. This can then be used by the
                        // vehicles control system to control the
                        // vehicle attitude and the attitude of
                        // various sensors such as cameras.
mavlink10.MAV_CMD_DO_DIGICAM_CONFIGURE = 202 // THIS INTERFACE IS DEPRECATED since 2018-01. Please use PARAM_EXT_XXX
                        // messages and the camera definition format
                        // described in https://mavlink.io/en/protocol
                        // /camera_def.html.
mavlink10.MAV_CMD_DO_DIGICAM_CONTROL = 203 // THIS INTERFACE IS DEPRECATED since 2018-01. Please use PARAM_EXT_XXX
                        // messages and the camera definition format
                        // described in https://mavlink.io/en/protocol
                        // /camera_def.html.
mavlink10.MAV_CMD_DO_MOUNT_CONFIGURE = 204 // Mission command to configure a camera or antenna mount
mavlink10.MAV_CMD_DO_MOUNT_CONTROL = 205 // Mission command to control a camera or antenna mount
mavlink10.MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206 // Mission command to set camera trigger distance for this flight. The
                        // camera is triggered each time this distance
                        // is exceeded. This command can also be used
                        // to set the shutter integration time for the
                        // camera.
mavlink10.MAV_CMD_DO_FENCE_ENABLE = 207 // Mission command to enable the geofence
mavlink10.MAV_CMD_DO_PARACHUTE = 208 // Mission command to trigger a parachute
mavlink10.MAV_CMD_DO_MOTOR_TEST = 209 // Mission command to perform motor test
mavlink10.MAV_CMD_DO_INVERTED_FLIGHT = 210 // Change to/from inverted flight
mavlink10.MAV_CMD_NAV_SET_YAW_SPEED = 213 // Sets a desired vehicle turn angle and speed change
mavlink10.MAV_CMD_DO_SET_CAM_TRIGG_INTERVAL = 214 // Mission command to set camera trigger interval for this flight. If
                        // triggering is enabled, the camera is
                        // triggered each time this interval expires.
                        // This command can also be used to set the
                        // shutter integration time for the camera.
mavlink10.MAV_CMD_DO_MOUNT_CONTROL_QUAT = 220 // Mission command to control a camera or antenna mount, using a
                        // quaternion as reference.
mavlink10.MAV_CMD_DO_GUIDED_MASTER = 221 // set id of master controller
mavlink10.MAV_CMD_DO_GUIDED_LIMITS = 222 // set limits for external control
mavlink10.MAV_CMD_DO_ENGINE_CONTROL = 223 // Control vehicle engine. This is interpreted by the vehicles engine
                        // controller to change the target engine
                        // state. It is intended for vehicles with
                        // internal combustion engines
mavlink10.MAV_CMD_DO_SET_MISSION_CURRENT = 224 // Set the mission item with sequence number seq as current item. This
                        // means that the MAV will continue to this
                        // mission item on the shortest path (not
                        // following the mission items in-between).
mavlink10.MAV_CMD_DO_LAST = 240 // NOP - This command is only used to mark the upper limit of the DO
                        // commands in the enumeration
mavlink10.MAV_CMD_PREFLIGHT_CALIBRATION = 241 // Trigger calibration. This command will be only accepted if in pre-
                        // flight mode. Except for Temperature
                        // Calibration, only one sensor should be set
                        // in a single message and all others should
                        // be zero.
mavlink10.MAV_CMD_PREFLIGHT_SET_SENSOR_OFFSETS = 242 // Set sensor offsets. This command will be only accepted if in pre-
                        // flight mode.
mavlink10.MAV_CMD_PREFLIGHT_UAVCAN = 243 // Trigger UAVCAN config. This command will be only accepted if in pre-
                        // flight mode.
mavlink10.MAV_CMD_PREFLIGHT_STORAGE = 245 // Request storage of different parameter values and logs. This command
                        // will be only accepted if in pre-flight
                        // mode.
mavlink10.MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN = 246 // Request the reboot or shutdown of system components.
mavlink10.MAV_CMD_OVERRIDE_GOTO = 252 // Hold / continue the current action
mavlink10.MAV_CMD_MISSION_START = 300 // start running a mission
mavlink10.MAV_CMD_COMPONENT_ARM_DISARM = 400 // Arms / Disarms a component
mavlink10.MAV_CMD_GET_HOME_POSITION = 410 // Request the home position from the vehicle.
mavlink10.MAV_CMD_START_RX_PAIR = 500 // Starts receiver pairing
mavlink10.MAV_CMD_GET_MESSAGE_INTERVAL = 510 // Request the interval between messages for a particular MAVLink message
                        // ID
mavlink10.MAV_CMD_SET_MESSAGE_INTERVAL = 511 // Set the interval between messages for a particular MAVLink message ID.
                        // This interface replaces REQUEST_DATA_STREAM
mavlink10.MAV_CMD_REQUEST_PROTOCOL_VERSION = 519 // Request MAVLink protocol version compatibility
mavlink10.MAV_CMD_REQUEST_AUTOPILOT_CAPABILITIES = 520 // Request autopilot capabilities
mavlink10.MAV_CMD_REQUEST_CAMERA_INFORMATION = 521 // Request camera information (CAMERA_INFORMATION).
mavlink10.MAV_CMD_REQUEST_CAMERA_SETTINGS = 522 // Request camera settings (CAMERA_SETTINGS).
mavlink10.MAV_CMD_REQUEST_STORAGE_INFORMATION = 525 // Request storage information (STORAGE_INFORMATION). Use the command's
                        // target_component to target a specific
                        // component's storage.
mavlink10.MAV_CMD_STORAGE_FORMAT = 526 // Format a storage medium. Once format is complete, a
                        // STORAGE_INFORMATION message is sent. Use
                        // the command's target_component to target a
                        // specific component's storage.
mavlink10.MAV_CMD_REQUEST_CAMERA_CAPTURE_STATUS = 527 // Request camera capture status (CAMERA_CAPTURE_STATUS)
mavlink10.MAV_CMD_REQUEST_FLIGHT_INFORMATION = 528 // Request flight information (FLIGHT_INFORMATION)
mavlink10.MAV_CMD_RESET_CAMERA_SETTINGS = 529 // Reset all camera settings to Factory Default
mavlink10.MAV_CMD_SET_CAMERA_MODE = 530 // Set camera running mode. Use NAN for reserved values.
mavlink10.MAV_CMD_IMAGE_START_CAPTURE = 2000 // Start image capture sequence. Sends CAMERA_IMAGE_CAPTURED after each
                        // capture. Use NAN for reserved values.
mavlink10.MAV_CMD_IMAGE_STOP_CAPTURE = 2001 // Stop image capture sequence Use NAN for reserved values.
mavlink10.MAV_CMD_REQUEST_CAMERA_IMAGE_CAPTURE = 2002 // Re-request a CAMERA_IMAGE_CAPTURE packet. Use NAN for reserved values.
mavlink10.MAV_CMD_DO_TRIGGER_CONTROL = 2003 // Enable or disable on-board camera triggering system.
mavlink10.MAV_CMD_VIDEO_START_CAPTURE = 2500 // Starts video capture (recording). Use NAN for reserved values.
mavlink10.MAV_CMD_VIDEO_STOP_CAPTURE = 2501 // Stop the current video capture (recording). Use NAN for reserved
                        // values.
mavlink10.MAV_CMD_VIDEO_START_STREAMING = 2502 // Start video streaming
mavlink10.MAV_CMD_VIDEO_STOP_STREAMING = 2503 // Stop the current video streaming
mavlink10.MAV_CMD_REQUEST_VIDEO_STREAM_INFORMATION = 2504 // Request video stream information (VIDEO_STREAM_INFORMATION)
mavlink10.MAV_CMD_LOGGING_START = 2510 // Request to start streaming logging data over MAVLink (see also
                        // LOGGING_DATA message)
mavlink10.MAV_CMD_LOGGING_STOP = 2511 // Request to stop streaming log data over MAVLink
mavlink10.MAV_CMD_AIRFRAME_CONFIGURATION = 2520 // 
mavlink10.MAV_CMD_CONTROL_HIGH_LATENCY = 2600 // Request to start/stop transmitting over the high latency telemetry
mavlink10.MAV_CMD_PANORAMA_CREATE = 2800 // Create a panorama at the current position
mavlink10.MAV_CMD_DO_VTOL_TRANSITION = 3000 // Request VTOL transition
mavlink10.MAV_CMD_ARM_AUTHORIZATION_REQUEST = 3001 // Request authorization to arm the vehicle to a external entity, the arm
                        // authorizer is responsible to request all
                        // data that is needs from the vehicle before
                        // authorize or deny the request. If approved
                        // the progress of command_ack message should
                        // be set with period of time that this
                        // authorization is valid in seconds or in
                        // case it was denied it should be set with
                        // one of the reasons in
                        // ARM_AUTH_DENIED_REASON.
mavlink10.MAV_CMD_SET_GUIDED_SUBMODE_STANDARD = 4000 // This command sets the submode to standard guided when vehicle is in
                        // guided mode. The vehicle holds position and
                        // altitude and the user can input the desired
                        // velocities along all three axes.
mavlink10.MAV_CMD_SET_GUIDED_SUBMODE_CIRCLE = 4001 // This command sets submode circle when vehicle is in guided mode.
                        // Vehicle flies along a circle facing the
                        // center of the circle. The user can input
                        // the velocity along the circle and change
                        // the radius. If no input is given the
                        // vehicle will hold position.
mavlink10.MAV_CMD_CONDITION_GATE = 4501 // Delay mission state machine until gate has been reached.
mavlink10.MAV_CMD_NAV_FENCE_RETURN_POINT = 5000 // Fence return point. There can only be one fence return point.
mavlink10.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_INCLUSION = 5001 // Fence vertex for an inclusion polygon (the polygon must not be self-
                        // intersecting). The vehicle must stay within
                        // this area. Minimum of 3 vertices required.
mavlink10.MAV_CMD_NAV_FENCE_POLYGON_VERTEX_EXCLUSION = 5002 // Fence vertex for an exclusion polygon (the polygon must not be self-
                        // intersecting). The vehicle must stay
                        // outside this area. Minimum of 3 vertices
                        // required.
mavlink10.MAV_CMD_NAV_FENCE_CIRCLE_INCLUSION = 5003 // Circular fence area. The vehicle must stay inside this area.
mavlink10.MAV_CMD_NAV_FENCE_CIRCLE_EXCLUSION = 5004 // Circular fence area. The vehicle must stay outside this area.
mavlink10.MAV_CMD_NAV_RALLY_POINT = 5100 // Rally point. You can have multiple rally points defined.
mavlink10.MAV_CMD_UAVCAN_GET_NODE_INFO = 5200 // Commands the vehicle to respond with a sequence of messages
                        // UAVCAN_NODE_INFO, one message per every
                        // UAVCAN node that is online. Note that some
                        // of the response messages can be lost, which
                        // the receiver can detect easily by checking
                        // whether every received UAVCAN_NODE_STATUS
                        // has a matching message UAVCAN_NODE_INFO
                        // received earlier; if not, this command
                        // should be sent again in order to request
                        // re-transmission of the node information
                        // messages.
mavlink10.MAV_CMD_PAYLOAD_PREPARE_DEPLOY = 30001 // Deploy payload on a Lat / Lon / Alt position. This includes the
                        // navigation to reach the required release
                        // position and velocity.
mavlink10.MAV_CMD_PAYLOAD_CONTROL_DEPLOY = 30002 // Control the payload deployment.
mavlink10.MAV_CMD_WAYPOINT_USER_1 = 31000 // User defined waypoint item. Ground Station will show the Vehicle as
                        // flying through this item.
mavlink10.MAV_CMD_WAYPOINT_USER_2 = 31001 // User defined waypoint item. Ground Station will show the Vehicle as
                        // flying through this item.
mavlink10.MAV_CMD_WAYPOINT_USER_3 = 31002 // User defined waypoint item. Ground Station will show the Vehicle as
                        // flying through this item.
mavlink10.MAV_CMD_WAYPOINT_USER_4 = 31003 // User defined waypoint item. Ground Station will show the Vehicle as
                        // flying through this item.
mavlink10.MAV_CMD_WAYPOINT_USER_5 = 31004 // User defined waypoint item. Ground Station will show the Vehicle as
                        // flying through this item.
mavlink10.MAV_CMD_SPATIAL_USER_1 = 31005 // User defined spatial item. Ground Station will not show the Vehicle as
                        // flying through this item. Example: ROI
                        // item.
mavlink10.MAV_CMD_SPATIAL_USER_2 = 31006 // User defined spatial item. Ground Station will not show the Vehicle as
                        // flying through this item. Example: ROI
                        // item.
mavlink10.MAV_CMD_SPATIAL_USER_3 = 31007 // User defined spatial item. Ground Station will not show the Vehicle as
                        // flying through this item. Example: ROI
                        // item.
mavlink10.MAV_CMD_SPATIAL_USER_4 = 31008 // User defined spatial item. Ground Station will not show the Vehicle as
                        // flying through this item. Example: ROI
                        // item.
mavlink10.MAV_CMD_SPATIAL_USER_5 = 31009 // User defined spatial item. Ground Station will not show the Vehicle as
                        // flying through this item. Example: ROI
                        // item.
mavlink10.MAV_CMD_USER_1 = 31010 // User defined command. Ground Station will not show the Vehicle as
                        // flying through this item. Example:
                        // MAV_CMD_DO_SET_PARAMETER item.
mavlink10.MAV_CMD_USER_2 = 31011 // User defined command. Ground Station will not show the Vehicle as
                        // flying through this item. Example:
                        // MAV_CMD_DO_SET_PARAMETER item.
mavlink10.MAV_CMD_USER_3 = 31012 // User defined command. Ground Station will not show the Vehicle as
                        // flying through this item. Example:
                        // MAV_CMD_DO_SET_PARAMETER item.
mavlink10.MAV_CMD_USER_4 = 31013 // User defined command. Ground Station will not show the Vehicle as
                        // flying through this item. Example:
                        // MAV_CMD_DO_SET_PARAMETER item.
mavlink10.MAV_CMD_USER_5 = 31014 // User defined command. Ground Station will not show the Vehicle as
                        // flying through this item. Example:
                        // MAV_CMD_DO_SET_PARAMETER item.
mavlink10.MAV_CMD_ENUM_END = 31015 // 

// MAV_DATA_STREAM
mavlink10.MAV_DATA_STREAM_ALL = 0 // Enable all data streams
mavlink10.MAV_DATA_STREAM_RAW_SENSORS = 1 // Enable IMU_RAW, GPS_RAW, GPS_STATUS packets.
mavlink10.MAV_DATA_STREAM_EXTENDED_STATUS = 2 // Enable GPS_STATUS, CONTROL_STATUS, AUX_STATUS
mavlink10.MAV_DATA_STREAM_RC_CHANNELS = 3 // Enable RC_CHANNELS_SCALED, RC_CHANNELS_RAW, SERVO_OUTPUT_RAW
mavlink10.MAV_DATA_STREAM_RAW_CONTROLLER = 4 // Enable ATTITUDE_CONTROLLER_OUTPUT, POSITION_CONTROLLER_OUTPUT,
                        // NAV_CONTROLLER_OUTPUT.
mavlink10.MAV_DATA_STREAM_POSITION = 6 // Enable LOCAL_POSITION, GLOBAL_POSITION/GLOBAL_POSITION_INT messages.
mavlink10.MAV_DATA_STREAM_EXTRA1 = 10 // Dependent on the autopilot
mavlink10.MAV_DATA_STREAM_EXTRA2 = 11 // Dependent on the autopilot
mavlink10.MAV_DATA_STREAM_EXTRA3 = 12 // Dependent on the autopilot
mavlink10.MAV_DATA_STREAM_ENUM_END = 13 // 

// MAV_ROI
mavlink10.MAV_ROI_NONE = 0 // No region of interest.
mavlink10.MAV_ROI_WPNEXT = 1 // Point toward next waypoint, with optional pitch/roll/yaw offset.
mavlink10.MAV_ROI_WPINDEX = 2 // Point toward given waypoint.
mavlink10.MAV_ROI_LOCATION = 3 // Point toward fixed location.
mavlink10.MAV_ROI_TARGET = 4 // Point toward of given id.
mavlink10.MAV_ROI_ENUM_END = 5 // 

// MAV_CMD_ACK
mavlink10.MAV_CMD_ACK_OK = 1 // Command / mission item is ok.
mavlink10.MAV_CMD_ACK_ERR_FAIL = 2 // Generic error message if none of the other reasons fails or if no
                        // detailed error reporting is implemented.
mavlink10.MAV_CMD_ACK_ERR_ACCESS_DENIED = 3 // The system is refusing to accept this command from this source /
                        // communication partner.
mavlink10.MAV_CMD_ACK_ERR_NOT_SUPPORTED = 4 // Command or mission item is not supported, other commands would be
                        // accepted.
mavlink10.MAV_CMD_ACK_ERR_COORDINATE_FRAME_NOT_SUPPORTED = 5 // The coordinate frame of this command / mission item is not supported.
mavlink10.MAV_CMD_ACK_ERR_COORDINATES_OUT_OF_RANGE = 6 // The coordinate frame of this command is ok, but he coordinate values
                        // exceed the safety limits of this system.
                        // This is a generic error, please use the
                        // more specific error messages below if
                        // possible.
mavlink10.MAV_CMD_ACK_ERR_X_LAT_OUT_OF_RANGE = 7 // The X or latitude value is out of range.
mavlink10.MAV_CMD_ACK_ERR_Y_LON_OUT_OF_RANGE = 8 // The Y or longitude value is out of range.
mavlink10.MAV_CMD_ACK_ERR_Z_ALT_OUT_OF_RANGE = 9 // The Z or altitude value is out of range.
mavlink10.MAV_CMD_ACK_ENUM_END = 10 // 

// MAV_PARAM_TYPE
mavlink10.MAV_PARAM_TYPE_UINT8 = 1 // 8-bit unsigned integer
mavlink10.MAV_PARAM_TYPE_INT8 = 2 // 8-bit signed integer
mavlink10.MAV_PARAM_TYPE_UINT16 = 3 // 16-bit unsigned integer
mavlink10.MAV_PARAM_TYPE_INT16 = 4 // 16-bit signed integer
mavlink10.MAV_PARAM_TYPE_UINT32 = 5 // 32-bit unsigned integer
mavlink10.MAV_PARAM_TYPE_INT32 = 6 // 32-bit signed integer
mavlink10.MAV_PARAM_TYPE_UINT64 = 7 // 64-bit unsigned integer
mavlink10.MAV_PARAM_TYPE_INT64 = 8 // 64-bit signed integer
mavlink10.MAV_PARAM_TYPE_REAL32 = 9 // 32-bit floating-point
mavlink10.MAV_PARAM_TYPE_REAL64 = 10 // 64-bit floating-point
mavlink10.MAV_PARAM_TYPE_ENUM_END = 11 // 

// MAV_PARAM_EXT_TYPE
mavlink10.MAV_PARAM_EXT_TYPE_UINT8 = 1 // 8-bit unsigned integer
mavlink10.MAV_PARAM_EXT_TYPE_INT8 = 2 // 8-bit signed integer
mavlink10.MAV_PARAM_EXT_TYPE_UINT16 = 3 // 16-bit unsigned integer
mavlink10.MAV_PARAM_EXT_TYPE_INT16 = 4 // 16-bit signed integer
mavlink10.MAV_PARAM_EXT_TYPE_UINT32 = 5 // 32-bit unsigned integer
mavlink10.MAV_PARAM_EXT_TYPE_INT32 = 6 // 32-bit signed integer
mavlink10.MAV_PARAM_EXT_TYPE_UINT64 = 7 // 64-bit unsigned integer
mavlink10.MAV_PARAM_EXT_TYPE_INT64 = 8 // 64-bit signed integer
mavlink10.MAV_PARAM_EXT_TYPE_REAL32 = 9 // 32-bit floating-point
mavlink10.MAV_PARAM_EXT_TYPE_REAL64 = 10 // 64-bit floating-point
mavlink10.MAV_PARAM_EXT_TYPE_CUSTOM = 11 // Custom Type
mavlink10.MAV_PARAM_EXT_TYPE_ENUM_END = 12 // 

// MAV_RESULT
mavlink10.MAV_RESULT_ACCEPTED = 0 // Command ACCEPTED and EXECUTED
mavlink10.MAV_RESULT_TEMPORARILY_REJECTED = 1 // Command TEMPORARY REJECTED/DENIED
mavlink10.MAV_RESULT_DENIED = 2 // Command PERMANENTLY DENIED
mavlink10.MAV_RESULT_UNSUPPORTED = 3 // Command UNKNOWN/UNSUPPORTED
mavlink10.MAV_RESULT_FAILED = 4 // Command executed, but failed
mavlink10.MAV_RESULT_IN_PROGRESS = 5 // WIP: Command being executed
mavlink10.MAV_RESULT_ENUM_END = 6 // 

// MAV_MISSION_RESULT
mavlink10.MAV_MISSION_ACCEPTED = 0 // mission accepted OK
mavlink10.MAV_MISSION_ERROR = 1 // generic error / not accepting mission commands at all right now
mavlink10.MAV_MISSION_UNSUPPORTED_FRAME = 2 // coordinate frame is not supported
mavlink10.MAV_MISSION_UNSUPPORTED = 3 // command is not supported
mavlink10.MAV_MISSION_NO_SPACE = 4 // mission item exceeds storage space
mavlink10.MAV_MISSION_INVALID = 5 // one of the parameters has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM1 = 6 // param1 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM2 = 7 // param2 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM3 = 8 // param3 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM4 = 9 // param4 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM5_X = 10 // x/param5 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM6_Y = 11 // y/param6 has an invalid value
mavlink10.MAV_MISSION_INVALID_PARAM7 = 12 // param7 has an invalid value
mavlink10.MAV_MISSION_INVALID_SEQUENCE = 13 // received waypoint out of sequence
mavlink10.MAV_MISSION_DENIED = 14 // not accepting any mission commands from this communication partner
mavlink10.MAV_MISSION_RESULT_ENUM_END = 15 // 

// MAV_SEVERITY
mavlink10.MAV_SEVERITY_EMERGENCY = 0 // System is unusable. This is a "panic" condition.
mavlink10.MAV_SEVERITY_ALERT = 1 // Action should be taken immediately. Indicates error in non-critical
                        // systems.
mavlink10.MAV_SEVERITY_CRITICAL = 2 // Action must be taken immediately. Indicates failure in a primary
                        // system.
mavlink10.MAV_SEVERITY_ERROR = 3 // Indicates an error in secondary/redundant systems.
mavlink10.MAV_SEVERITY_WARNING = 4 // Indicates about a possible future error if this is not resolved within
                        // a given timeframe. Example would be a low
                        // battery warning.
mavlink10.MAV_SEVERITY_NOTICE = 5 // An unusual event has occurred, though not an error condition. This
                        // should be investigated for the root cause.
mavlink10.MAV_SEVERITY_INFO = 6 // Normal operational messages. Useful for logging. No action is required
                        // for these messages.
mavlink10.MAV_SEVERITY_DEBUG = 7 // Useful non-operational messages that can assist in debugging. These
                        // should not occur during normal operation.
mavlink10.MAV_SEVERITY_ENUM_END = 8 // 

// MAV_POWER_STATUS
mavlink10.MAV_POWER_STATUS_BRICK_VALID = 1 // main brick power supply valid
mavlink10.MAV_POWER_STATUS_SERVO_VALID = 2 // main servo power supply valid for FMU
mavlink10.MAV_POWER_STATUS_USB_CONNECTED = 4 // USB power is connected
mavlink10.MAV_POWER_STATUS_PERIPH_OVERCURRENT = 8 // peripheral supply is in over-current state
mavlink10.MAV_POWER_STATUS_PERIPH_HIPOWER_OVERCURRENT = 16 // hi-power peripheral supply is in over-current state
mavlink10.MAV_POWER_STATUS_CHANGED = 32 // Power status has changed since boot
mavlink10.MAV_POWER_STATUS_ENUM_END = 33 // 

// SERIAL_CONTROL_DEV
mavlink10.SERIAL_CONTROL_DEV_TELEM1 = 0 // First telemetry port
mavlink10.SERIAL_CONTROL_DEV_TELEM2 = 1 // Second telemetry port
mavlink10.SERIAL_CONTROL_DEV_GPS1 = 2 // First GPS port
mavlink10.SERIAL_CONTROL_DEV_GPS2 = 3 // Second GPS port
mavlink10.SERIAL_CONTROL_DEV_SHELL = 10 // system shell
mavlink10.SERIAL_CONTROL_DEV_ENUM_END = 11 // 

// SERIAL_CONTROL_FLAG
mavlink10.SERIAL_CONTROL_FLAG_REPLY = 1 // Set if this is a reply
mavlink10.SERIAL_CONTROL_FLAG_RESPOND = 2 // Set if the sender wants the receiver to send a response as another
                        // SERIAL_CONTROL message
mavlink10.SERIAL_CONTROL_FLAG_EXCLUSIVE = 4 // Set if access to the serial port should be removed from whatever
                        // driver is currently using it, giving
                        // exclusive access to the SERIAL_CONTROL
                        // protocol. The port can be handed back by
                        // sending a request without this flag set
mavlink10.SERIAL_CONTROL_FLAG_BLOCKING = 8 // Block on writes to the serial port
mavlink10.SERIAL_CONTROL_FLAG_MULTI = 16 // Send multiple replies until port is drained
mavlink10.SERIAL_CONTROL_FLAG_ENUM_END = 17 // 

// MAV_DISTANCE_SENSOR
mavlink10.MAV_DISTANCE_SENSOR_LASER = 0 // Laser rangefinder, e.g. LightWare SF02/F or PulsedLight units
mavlink10.MAV_DISTANCE_SENSOR_ULTRASOUND = 1 // Ultrasound rangefinder, e.g. MaxBotix units
mavlink10.MAV_DISTANCE_SENSOR_INFRARED = 2 // Infrared rangefinder, e.g. Sharp units
mavlink10.MAV_DISTANCE_SENSOR_RADAR = 3 // Radar type, e.g. uLanding units
mavlink10.MAV_DISTANCE_SENSOR_UNKNOWN = 4 // Broken or unknown type, e.g. analog units
mavlink10.MAV_DISTANCE_SENSOR_ENUM_END = 5 // 

// MAV_SENSOR_ORIENTATION
mavlink10.MAV_SENSOR_ROTATION_NONE = 0 // Roll: 0, Pitch: 0, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_YAW_45 = 1 // Roll: 0, Pitch: 0, Yaw: 45
mavlink10.MAV_SENSOR_ROTATION_YAW_90 = 2 // Roll: 0, Pitch: 0, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_YAW_135 = 3 // Roll: 0, Pitch: 0, Yaw: 135
mavlink10.MAV_SENSOR_ROTATION_YAW_180 = 4 // Roll: 0, Pitch: 0, Yaw: 180
mavlink10.MAV_SENSOR_ROTATION_YAW_225 = 5 // Roll: 0, Pitch: 0, Yaw: 225
mavlink10.MAV_SENSOR_ROTATION_YAW_270 = 6 // Roll: 0, Pitch: 0, Yaw: 270
mavlink10.MAV_SENSOR_ROTATION_YAW_315 = 7 // Roll: 0, Pitch: 0, Yaw: 315
mavlink10.MAV_SENSOR_ROTATION_ROLL_180 = 8 // Roll: 180, Pitch: 0, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_45 = 9 // Roll: 180, Pitch: 0, Yaw: 45
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_90 = 10 // Roll: 180, Pitch: 0, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_135 = 11 // Roll: 180, Pitch: 0, Yaw: 135
mavlink10.MAV_SENSOR_ROTATION_PITCH_180 = 12 // Roll: 0, Pitch: 180, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_225 = 13 // Roll: 180, Pitch: 0, Yaw: 225
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_270 = 14 // Roll: 180, Pitch: 0, Yaw: 270
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_YAW_315 = 15 // Roll: 180, Pitch: 0, Yaw: 315
mavlink10.MAV_SENSOR_ROTATION_ROLL_90 = 16 // Roll: 90, Pitch: 0, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_YAW_45 = 17 // Roll: 90, Pitch: 0, Yaw: 45
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_YAW_90 = 18 // Roll: 90, Pitch: 0, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_YAW_135 = 19 // Roll: 90, Pitch: 0, Yaw: 135
mavlink10.MAV_SENSOR_ROTATION_ROLL_270 = 20 // Roll: 270, Pitch: 0, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_YAW_45 = 21 // Roll: 270, Pitch: 0, Yaw: 45
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_YAW_90 = 22 // Roll: 270, Pitch: 0, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_YAW_135 = 23 // Roll: 270, Pitch: 0, Yaw: 135
mavlink10.MAV_SENSOR_ROTATION_PITCH_90 = 24 // Roll: 0, Pitch: 90, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_PITCH_270 = 25 // Roll: 0, Pitch: 270, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_PITCH_180_YAW_90 = 26 // Roll: 0, Pitch: 180, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_PITCH_180_YAW_270 = 27 // Roll: 0, Pitch: 180, Yaw: 270
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_90 = 28 // Roll: 90, Pitch: 90, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_PITCH_90 = 29 // Roll: 180, Pitch: 90, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_PITCH_90 = 30 // Roll: 270, Pitch: 90, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_180 = 31 // Roll: 90, Pitch: 180, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_PITCH_180 = 32 // Roll: 270, Pitch: 180, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_270 = 33 // Roll: 90, Pitch: 270, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_180_PITCH_270 = 34 // Roll: 180, Pitch: 270, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_270_PITCH_270 = 35 // Roll: 270, Pitch: 270, Yaw: 0
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_180_YAW_90 = 36 // Roll: 90, Pitch: 180, Yaw: 90
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_YAW_270 = 37 // Roll: 90, Pitch: 0, Yaw: 270
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_68_YAW_293 = 38 // Roll: 90, Pitch: 68, Yaw: 293
mavlink10.MAV_SENSOR_ROTATION_PITCH_315 = 39 // Pitch: 315
mavlink10.MAV_SENSOR_ROTATION_ROLL_90_PITCH_315 = 40 // Roll: 90, Pitch: 315
mavlink10.MAV_SENSOR_ROTATION_CUSTOM = 100 // Custom orientation
mavlink10.MAV_SENSOR_ORIENTATION_ENUM_END = 101 // 

// MAV_PROTOCOL_CAPABILITY
mavlink10.MAV_PROTOCOL_CAPABILITY_MISSION_FLOAT = 1 // Autopilot supports MISSION float message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_PARAM_FLOAT = 2 // Autopilot supports the new param float message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_MISSION_INT = 4 // Autopilot supports MISSION_INT scaled integer message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_COMMAND_INT = 8 // Autopilot supports COMMAND_INT scaled integer message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_PARAM_UNION = 16 // Autopilot supports the new param union message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_FTP = 32 // Autopilot supports the new FILE_TRANSFER_PROTOCOL message type.
mavlink10.MAV_PROTOCOL_CAPABILITY_SET_ATTITUDE_TARGET = 64 // Autopilot supports commanding attitude offboard.
mavlink10.MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_LOCAL_NED = 128 // Autopilot supports commanding position and velocity targets in local
                        // NED frame.
mavlink10.MAV_PROTOCOL_CAPABILITY_SET_POSITION_TARGET_GLOBAL_INT = 256 // Autopilot supports commanding position and velocity targets in global
                        // scaled integers.
mavlink10.MAV_PROTOCOL_CAPABILITY_TERRAIN = 512 // Autopilot supports terrain protocol / data handling.
mavlink10.MAV_PROTOCOL_CAPABILITY_SET_ACTUATOR_TARGET = 1024 // Autopilot supports direct actuator control.
mavlink10.MAV_PROTOCOL_CAPABILITY_FLIGHT_TERMINATION = 2048 // Autopilot supports the flight termination command.
mavlink10.MAV_PROTOCOL_CAPABILITY_COMPASS_CALIBRATION = 4096 // Autopilot supports onboard compass calibration.
mavlink10.MAV_PROTOCOL_CAPABILITY_MAVLINK2 = 8192 // Autopilot supports MAVLink version 2.
mavlink10.MAV_PROTOCOL_CAPABILITY_MISSION_FENCE = 16384 // Autopilot supports mission fence protocol.
mavlink10.MAV_PROTOCOL_CAPABILITY_MISSION_RALLY = 32768 // Autopilot supports mission rally point protocol.
mavlink10.MAV_PROTOCOL_CAPABILITY_FLIGHT_INFORMATION = 65536 // Autopilot supports the flight information protocol.
mavlink10.MAV_PROTOCOL_CAPABILITY_ENUM_END = 65537 // 

// MAV_MISSION_TYPE
mavlink10.MAV_MISSION_TYPE_MISSION = 0 // Items are mission commands for main mission.
mavlink10.MAV_MISSION_TYPE_FENCE = 1 // Specifies GeoFence area(s). Items are MAV_CMD_FENCE_ GeoFence items.
mavlink10.MAV_MISSION_TYPE_RALLY = 2 // Specifies the rally points for the vehicle. Rally points are
                        // alternative RTL points. Items are
                        // MAV_CMD_RALLY_POINT rally point items.
mavlink10.MAV_MISSION_TYPE_ALL = 255 // Only used in MISSION_CLEAR_ALL to clear all mission types.
mavlink10.MAV_MISSION_TYPE_ENUM_END = 256 // 

// MAV_ESTIMATOR_TYPE
mavlink10.MAV_ESTIMATOR_TYPE_NAIVE = 1 // This is a naive estimator without any real covariance feedback.
mavlink10.MAV_ESTIMATOR_TYPE_VISION = 2 // Computer vision based estimate. Might be up to scale.
mavlink10.MAV_ESTIMATOR_TYPE_VIO = 3 // Visual-inertial estimate.
mavlink10.MAV_ESTIMATOR_TYPE_GPS = 4 // Plain GPS estimate.
mavlink10.MAV_ESTIMATOR_TYPE_GPS_INS = 5 // Estimator integrating GPS and inertial sensing.
mavlink10.MAV_ESTIMATOR_TYPE_ENUM_END = 6 // 

// MAV_BATTERY_TYPE
mavlink10.MAV_BATTERY_TYPE_UNKNOWN = 0 // Not specified.
mavlink10.MAV_BATTERY_TYPE_LIPO = 1 // Lithium polymer battery
mavlink10.MAV_BATTERY_TYPE_LIFE = 2 // Lithium-iron-phosphate battery
mavlink10.MAV_BATTERY_TYPE_LION = 3 // Lithium-ION battery
mavlink10.MAV_BATTERY_TYPE_NIMH = 4 // Nickel metal hydride battery
mavlink10.MAV_BATTERY_TYPE_ENUM_END = 5 // 

// MAV_BATTERY_FUNCTION
mavlink10.MAV_BATTERY_FUNCTION_UNKNOWN = 0 // Battery function is unknown
mavlink10.MAV_BATTERY_FUNCTION_ALL = 1 // Battery supports all flight systems
mavlink10.MAV_BATTERY_FUNCTION_PROPULSION = 2 // Battery for the propulsion system
mavlink10.MAV_BATTERY_FUNCTION_AVIONICS = 3 // Avionics battery
mavlink10.MAV_BATTERY_TYPE_PAYLOAD = 4 // Payload battery
mavlink10.MAV_BATTERY_FUNCTION_ENUM_END = 5 // 

// MAV_BATTERY_CHARGE_STATE
mavlink10.MAV_BATTERY_CHARGE_STATE_UNDEFINED = 0 // Low battery state is not provided
mavlink10.MAV_BATTERY_CHARGE_STATE_OK = 1 // Battery is not in low state. Normal operation.
mavlink10.MAV_BATTERY_CHARGE_STATE_LOW = 2 // Battery state is low, warn and monitor close.
mavlink10.MAV_BATTERY_CHARGE_STATE_CRITICAL = 3 // Battery state is critical, return or abort immediately.
mavlink10.MAV_BATTERY_CHARGE_STATE_EMERGENCY = 4 // Battery state is too low for ordinary abort sequence. Perform fastest
                        // possible emergency stop to prevent damage.
mavlink10.MAV_BATTERY_CHARGE_STATE_FAILED = 5 // Battery failed, damage unavoidable.
mavlink10.MAV_BATTERY_CHARGE_STATE_UNHEALTHY = 6 // Battery is diagnosed to be defective or an error occurred, usage is
                        // discouraged / prohibited.
mavlink10.MAV_BATTERY_CHARGE_STATE_ENUM_END = 7 // 

// MAV_VTOL_STATE
mavlink10.MAV_VTOL_STATE_UNDEFINED = 0 // MAV is not configured as VTOL
mavlink10.MAV_VTOL_STATE_TRANSITION_TO_FW = 1 // VTOL is in transition from multicopter to fixed-wing
mavlink10.MAV_VTOL_STATE_TRANSITION_TO_MC = 2 // VTOL is in transition from fixed-wing to multicopter
mavlink10.MAV_VTOL_STATE_MC = 3 // VTOL is in multicopter state
mavlink10.MAV_VTOL_STATE_FW = 4 // VTOL is in fixed-wing state
mavlink10.MAV_VTOL_STATE_ENUM_END = 5 // 

// MAV_LANDED_STATE
mavlink10.MAV_LANDED_STATE_UNDEFINED = 0 // MAV landed state is unknown
mavlink10.MAV_LANDED_STATE_ON_GROUND = 1 // MAV is landed (on ground)
mavlink10.MAV_LANDED_STATE_IN_AIR = 2 // MAV is in air
mavlink10.MAV_LANDED_STATE_TAKEOFF = 3 // MAV currently taking off
mavlink10.MAV_LANDED_STATE_LANDING = 4 // MAV currently landing
mavlink10.MAV_LANDED_STATE_ENUM_END = 5 // 

// ADSB_ALTITUDE_TYPE
mavlink10.ADSB_ALTITUDE_TYPE_PRESSURE_QNH = 0 // Altitude reported from a Baro source using QNH reference
mavlink10.ADSB_ALTITUDE_TYPE_GEOMETRIC = 1 // Altitude reported from a GNSS source
mavlink10.ADSB_ALTITUDE_TYPE_ENUM_END = 2 // 

// ADSB_EMITTER_TYPE
mavlink10.ADSB_EMITTER_TYPE_NO_INFO = 0 // 
mavlink10.ADSB_EMITTER_TYPE_LIGHT = 1 // 
mavlink10.ADSB_EMITTER_TYPE_SMALL = 2 // 
mavlink10.ADSB_EMITTER_TYPE_LARGE = 3 // 
mavlink10.ADSB_EMITTER_TYPE_HIGH_VORTEX_LARGE = 4 // 
mavlink10.ADSB_EMITTER_TYPE_HEAVY = 5 // 
mavlink10.ADSB_EMITTER_TYPE_HIGHLY_MANUV = 6 // 
mavlink10.ADSB_EMITTER_TYPE_ROTOCRAFT = 7 // 
mavlink10.ADSB_EMITTER_TYPE_UNASSIGNED = 8 // 
mavlink10.ADSB_EMITTER_TYPE_GLIDER = 9 // 
mavlink10.ADSB_EMITTER_TYPE_LIGHTER_AIR = 10 // 
mavlink10.ADSB_EMITTER_TYPE_PARACHUTE = 11 // 
mavlink10.ADSB_EMITTER_TYPE_ULTRA_LIGHT = 12 // 
mavlink10.ADSB_EMITTER_TYPE_UNASSIGNED2 = 13 // 
mavlink10.ADSB_EMITTER_TYPE_UAV = 14 // 
mavlink10.ADSB_EMITTER_TYPE_SPACE = 15 // 
mavlink10.ADSB_EMITTER_TYPE_UNASSGINED3 = 16 // 
mavlink10.ADSB_EMITTER_TYPE_EMERGENCY_SURFACE = 17 // 
mavlink10.ADSB_EMITTER_TYPE_SERVICE_SURFACE = 18 // 
mavlink10.ADSB_EMITTER_TYPE_POINT_OBSTACLE = 19 // 
mavlink10.ADSB_EMITTER_TYPE_ENUM_END = 20 // 

// ADSB_FLAGS
mavlink10.ADSB_FLAGS_VALID_COORDS = 1 // 
mavlink10.ADSB_FLAGS_VALID_ALTITUDE = 2 // 
mavlink10.ADSB_FLAGS_VALID_HEADING = 4 // 
mavlink10.ADSB_FLAGS_VALID_VELOCITY = 8 // 
mavlink10.ADSB_FLAGS_VALID_CALLSIGN = 16 // 
mavlink10.ADSB_FLAGS_VALID_SQUAWK = 32 // 
mavlink10.ADSB_FLAGS_SIMULATED = 64 // 
mavlink10.ADSB_FLAGS_ENUM_END = 65 // 

// MAV_DO_REPOSITION_FLAGS
mavlink10.MAV_DO_REPOSITION_FLAGS_CHANGE_MODE = 1 // The aircraft should immediately transition into guided. This should
                        // not be set for follow me applications
mavlink10.MAV_DO_REPOSITION_FLAGS_ENUM_END = 2 // 

// ESTIMATOR_STATUS_FLAGS
mavlink10.ESTIMATOR_ATTITUDE = 1 // True if the attitude estimate is good
mavlink10.ESTIMATOR_VELOCITY_HORIZ = 2 // True if the horizontal velocity estimate is good
mavlink10.ESTIMATOR_VELOCITY_VERT = 4 // True if the  vertical velocity estimate is good
mavlink10.ESTIMATOR_POS_HORIZ_REL = 8 // True if the horizontal position (relative) estimate is good
mavlink10.ESTIMATOR_POS_HORIZ_ABS = 16 // True if the horizontal position (absolute) estimate is good
mavlink10.ESTIMATOR_POS_VERT_ABS = 32 // True if the vertical position (absolute) estimate is good
mavlink10.ESTIMATOR_POS_VERT_AGL = 64 // True if the vertical position (above ground) estimate is good
mavlink10.ESTIMATOR_CONST_POS_MODE = 128 // True if the EKF is in a constant position mode and is not using
                        // external measurements (eg GPS or optical
                        // flow)
mavlink10.ESTIMATOR_PRED_POS_HORIZ_REL = 256 // True if the EKF has sufficient data to enter a mode that will provide
                        // a (relative) position estimate
mavlink10.ESTIMATOR_PRED_POS_HORIZ_ABS = 512 // True if the EKF has sufficient data to enter a mode that will provide
                        // a (absolute) position estimate
mavlink10.ESTIMATOR_GPS_GLITCH = 1024 // True if the EKF has detected a GPS glitch
mavlink10.ESTIMATOR_ACCEL_ERROR = 2048 // True if the EKF has detected bad accelerometer data
mavlink10.ESTIMATOR_STATUS_FLAGS_ENUM_END = 2049 // 

// MOTOR_TEST_ORDER
mavlink10.MOTOR_TEST_ORDER_DEFAULT = 0 // default autopilot motor test method
mavlink10.MOTOR_TEST_ORDER_SEQUENCE = 1 // motor numbers are specified as their index in a predefined vehicle-
                        // specific sequence
mavlink10.MOTOR_TEST_ORDER_BOARD = 2 // motor numbers are specified as the output as labeled on the board
mavlink10.MOTOR_TEST_ORDER_ENUM_END = 3 // 

// MOTOR_TEST_THROTTLE_TYPE
mavlink10.MOTOR_TEST_THROTTLE_PERCENT = 0 // throttle as a percentage from 0 ~ 100
mavlink10.MOTOR_TEST_THROTTLE_PWM = 1 // throttle as an absolute PWM value (normally in range of 1000~2000)
mavlink10.MOTOR_TEST_THROTTLE_PILOT = 2 // throttle pass-through from pilot's transmitter
mavlink10.MOTOR_TEST_COMPASS_CAL = 3 // per-motor compass calibration test
mavlink10.MOTOR_TEST_THROTTLE_TYPE_ENUM_END = 4 // 

// GPS_INPUT_IGNORE_FLAGS
mavlink10.GPS_INPUT_IGNORE_FLAG_ALT = 1 // ignore altitude field
mavlink10.GPS_INPUT_IGNORE_FLAG_HDOP = 2 // ignore hdop field
mavlink10.GPS_INPUT_IGNORE_FLAG_VDOP = 4 // ignore vdop field
mavlink10.GPS_INPUT_IGNORE_FLAG_VEL_HORIZ = 8 // ignore horizontal velocity field (vn and ve)
mavlink10.GPS_INPUT_IGNORE_FLAG_VEL_VERT = 16 // ignore vertical velocity field (vd)
mavlink10.GPS_INPUT_IGNORE_FLAG_SPEED_ACCURACY = 32 // ignore speed accuracy field
mavlink10.GPS_INPUT_IGNORE_FLAG_HORIZONTAL_ACCURACY = 64 // ignore horizontal accuracy field
mavlink10.GPS_INPUT_IGNORE_FLAG_VERTICAL_ACCURACY = 128 // ignore vertical accuracy field
mavlink10.GPS_INPUT_IGNORE_FLAGS_ENUM_END = 129 // 

// MAV_COLLISION_ACTION
mavlink10.MAV_COLLISION_ACTION_NONE = 0 // Ignore any potential collisions
mavlink10.MAV_COLLISION_ACTION_REPORT = 1 // Report potential collision
mavlink10.MAV_COLLISION_ACTION_ASCEND_OR_DESCEND = 2 // Ascend or Descend to avoid threat
mavlink10.MAV_COLLISION_ACTION_MOVE_HORIZONTALLY = 3 // Move horizontally to avoid threat
mavlink10.MAV_COLLISION_ACTION_MOVE_PERPENDICULAR = 4 // Aircraft to move perpendicular to the collision's velocity vector
mavlink10.MAV_COLLISION_ACTION_RTL = 5 // Aircraft to fly directly back to its launch point
mavlink10.MAV_COLLISION_ACTION_HOVER = 6 // Aircraft to stop in place
mavlink10.MAV_COLLISION_ACTION_ENUM_END = 7 // 

// MAV_COLLISION_THREAT_LEVEL
mavlink10.MAV_COLLISION_THREAT_LEVEL_NONE = 0 // Not a threat
mavlink10.MAV_COLLISION_THREAT_LEVEL_LOW = 1 // Craft is mildly concerned about this threat
mavlink10.MAV_COLLISION_THREAT_LEVEL_HIGH = 2 // Craft is panicing, and may take actions to avoid threat
mavlink10.MAV_COLLISION_THREAT_LEVEL_ENUM_END = 3 // 

// MAV_COLLISION_SRC
mavlink10.MAV_COLLISION_SRC_ADSB = 0 // ID field references ADSB_VEHICLE packets
mavlink10.MAV_COLLISION_SRC_MAVLINK_GPS_GLOBAL_INT = 1 // ID field references MAVLink SRC ID
mavlink10.MAV_COLLISION_SRC_ENUM_END = 2 // 

// GPS_FIX_TYPE
mavlink10.GPS_FIX_TYPE_NO_GPS = 0 // No GPS connected
mavlink10.GPS_FIX_TYPE_NO_FIX = 1 // No position information, GPS is connected
mavlink10.GPS_FIX_TYPE_2D_FIX = 2 // 2D position
mavlink10.GPS_FIX_TYPE_3D_FIX = 3 // 3D position
mavlink10.GPS_FIX_TYPE_DGPS = 4 // DGPS/SBAS aided 3D position
mavlink10.GPS_FIX_TYPE_RTK_FLOAT = 5 // RTK float, 3D position
mavlink10.GPS_FIX_TYPE_RTK_FIXED = 6 // RTK Fixed, 3D position
mavlink10.GPS_FIX_TYPE_STATIC = 7 // Static fixed, typically used for base stations
mavlink10.GPS_FIX_TYPE_PPP = 8 // PPP, 3D position.
mavlink10.GPS_FIX_TYPE_ENUM_END = 9 // 

// RTK_BASELINE_COORDINATE_SYSTEM
mavlink10.RTK_BASELINE_COORDINATE_SYSTEM_ECEF = 0 // Earth-centered, Earth-fixed
mavlink10.RTK_BASELINE_COORDINATE_SYSTEM_NED = 1 // North, East, Down
mavlink10.RTK_BASELINE_COORDINATE_SYSTEM_ENUM_END = 2 // 

// LANDING_TARGET_TYPE
mavlink10.LANDING_TARGET_TYPE_LIGHT_BEACON = 0 // Landing target signaled by light beacon (ex: IR-LOCK)
mavlink10.LANDING_TARGET_TYPE_RADIO_BEACON = 1 // Landing target signaled by radio beacon (ex: ILS, NDB)
mavlink10.LANDING_TARGET_TYPE_VISION_FIDUCIAL = 2 // Landing target represented by a fiducial marker (ex: ARTag)
mavlink10.LANDING_TARGET_TYPE_VISION_OTHER = 3 // Landing target represented by a pre-defined visual shape/feature (ex:
                        // X-marker, H-marker, square)
mavlink10.LANDING_TARGET_TYPE_ENUM_END = 4 // 

// VTOL_TRANSITION_HEADING
mavlink10.VTOL_TRANSITION_HEADING_VEHICLE_DEFAULT = 0 // Respect the heading configuration of the vehicle.
mavlink10.VTOL_TRANSITION_HEADING_NEXT_WAYPOINT = 1 // Use the heading pointing towards the next waypoint.
mavlink10.VTOL_TRANSITION_HEADING_TAKEOFF = 2 // Use the heading on takeoff (while sitting on the ground).
mavlink10.VTOL_TRANSITION_HEADING_SPECIFIED = 3 // Use the specified heading in parameter 4.
mavlink10.VTOL_TRANSITION_HEADING_ANY = 4 // Use the current heading when reaching takeoff altitude (potentially
                        // facing the wind when weather-vaning is
                        // active).
mavlink10.VTOL_TRANSITION_HEADING_ENUM_END = 5 // 

// CAMERA_CAP_FLAGS
mavlink10.CAMERA_CAP_FLAGS_CAPTURE_VIDEO = 1 // Camera is able to record video.
mavlink10.CAMERA_CAP_FLAGS_CAPTURE_IMAGE = 2 // Camera is able to capture images.
mavlink10.CAMERA_CAP_FLAGS_HAS_MODES = 4 // Camera has separate Video and Image/Photo modes
                        // (MAV_CMD_SET_CAMERA_MODE)
mavlink10.CAMERA_CAP_FLAGS_CAN_CAPTURE_IMAGE_IN_VIDEO_MODE = 8 // Camera can capture images while in video mode
mavlink10.CAMERA_CAP_FLAGS_CAN_CAPTURE_VIDEO_IN_IMAGE_MODE = 16 // Camera can capture videos while in Photo/Image mode
mavlink10.CAMERA_CAP_FLAGS_HAS_IMAGE_SURVEY_MODE = 32 // Camera has image survey mode (MAV_CMD_SET_CAMERA_MODE)
mavlink10.CAMERA_CAP_FLAGS_ENUM_END = 33 // 

// PARAM_ACK
mavlink10.PARAM_ACK_ACCEPTED = 0 // Parameter value ACCEPTED and SET
mavlink10.PARAM_ACK_VALUE_UNSUPPORTED = 1 // Parameter value UNKNOWN/UNSUPPORTED
mavlink10.PARAM_ACK_FAILED = 2 // Parameter failed to set
mavlink10.PARAM_ACK_IN_PROGRESS = 3 // Parameter value received but not yet validated or set. A subsequent
                        // PARAM_EXT_ACK will follow once operation is
                        // completed with the actual result. These are
                        // for parameters that may take longer to set.
                        // Instead of waiting for an ACK and
                        // potentially timing out, you will
                        // immediately receive this response to let
                        // you know it was received.
mavlink10.PARAM_ACK_ENUM_END = 4 // 

// CAMERA_MODE
mavlink10.CAMERA_MODE_IMAGE = 0 // Camera is in image/photo capture mode.
mavlink10.CAMERA_MODE_VIDEO = 1 // Camera is in video capture mode.
mavlink10.CAMERA_MODE_IMAGE_SURVEY = 2 // Camera is in image survey capture mode. It allows for camera
                        // controller to do specific settings for
                        // surveys.
mavlink10.CAMERA_MODE_ENUM_END = 3 // 

// MAV_ARM_AUTH_DENIED_REASON
mavlink10.MAV_ARM_AUTH_DENIED_REASON_GENERIC = 0 // Not a specific reason
mavlink10.MAV_ARM_AUTH_DENIED_REASON_NONE = 1 // Authorizer will send the error as string to GCS
mavlink10.MAV_ARM_AUTH_DENIED_REASON_INVALID_WAYPOINT = 2 // At least one waypoint have a invalid value
mavlink10.MAV_ARM_AUTH_DENIED_REASON_TIMEOUT = 3 // Timeout in the authorizer process(in case it depends on network)
mavlink10.MAV_ARM_AUTH_DENIED_REASON_AIRSPACE_IN_USE = 4 // Airspace of the mission in use by another vehicle, second result
                        // parameter can have the waypoint id that
                        // caused it to be denied.
mavlink10.MAV_ARM_AUTH_DENIED_REASON_BAD_WEATHER = 5 // Weather is not good to fly
mavlink10.MAV_ARM_AUTH_DENIED_REASON_ENUM_END = 6 // 

// RC_TYPE
mavlink10.RC_TYPE_SPEKTRUM_DSM2 = 0 // Spektrum DSM2
mavlink10.RC_TYPE_SPEKTRUM_DSMX = 1 // Spektrum DSMX
mavlink10.RC_TYPE_ENUM_END = 2 // 

// message IDs
mavlink10.MAVLINK_MSG_ID_BAD_DATA = -1
mavlink10.MAVLINK_MSG_ID_NODE_REALTIME_INFO = 200
mavlink10.MAVLINK_MSG_ID_NODE_RELATIVE_FUSED = 201
mavlink10.MAVLINK_MSG_ID_SWARM_REMOTE_COMMAND = 202
mavlink10.MAVLINK_MSG_ID_NODE_DETECTED = 203
mavlink10.MAVLINK_MSG_ID_DRONE_STATUS = 204
mavlink10.MAVLINK_MSG_ID_DRONE_ODOM_GT = 205
mavlink10.MAVLINK_MSG_ID_DRONE_POSE_GT = 206
mavlink10.MAVLINK_MSG_ID_NODE_LOCAL_FUSED = 207
mavlink10.MAVLINK_MSG_ID_NODE_BASED_FUSED = 208
mavlink10.MAVLINK_MSG_ID_HEARTBEAT = 0
mavlink10.MAVLINK_MSG_ID_SYS_STATUS = 1
mavlink10.MAVLINK_MSG_ID_SYSTEM_TIME = 2
mavlink10.MAVLINK_MSG_ID_PING = 4
mavlink10.MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL = 5
mavlink10.MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK = 6
mavlink10.MAVLINK_MSG_ID_AUTH_KEY = 7
mavlink10.MAVLINK_MSG_ID_SET_MODE = 11
mavlink10.MAVLINK_MSG_ID_PARAM_REQUEST_READ = 20
mavlink10.MAVLINK_MSG_ID_PARAM_REQUEST_LIST = 21
mavlink10.MAVLINK_MSG_ID_PARAM_VALUE = 22
mavlink10.MAVLINK_MSG_ID_PARAM_SET = 23
mavlink10.MAVLINK_MSG_ID_GPS_RAW_INT = 24
mavlink10.MAVLINK_MSG_ID_GPS_STATUS = 25
mavlink10.MAVLINK_MSG_ID_SCALED_IMU = 26
mavlink10.MAVLINK_MSG_ID_RAW_IMU = 27
mavlink10.MAVLINK_MSG_ID_RAW_PRESSURE = 28
mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE = 29
mavlink10.MAVLINK_MSG_ID_ATTITUDE = 30
mavlink10.MAVLINK_MSG_ID_ATTITUDE_QUATERNION = 31
mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED = 32
mavlink10.MAVLINK_MSG_ID_GLOBAL_POSITION_INT = 33
mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_SCALED = 34
mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_RAW = 35
mavlink10.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW = 36
mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST = 37
mavlink10.MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST = 38
mavlink10.MAVLINK_MSG_ID_MISSION_ITEM = 39
mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST = 40
mavlink10.MAVLINK_MSG_ID_MISSION_SET_CURRENT = 41
mavlink10.MAVLINK_MSG_ID_MISSION_CURRENT = 42
mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_LIST = 43
mavlink10.MAVLINK_MSG_ID_MISSION_COUNT = 44
mavlink10.MAVLINK_MSG_ID_MISSION_CLEAR_ALL = 45
mavlink10.MAVLINK_MSG_ID_MISSION_ITEM_REACHED = 46
mavlink10.MAVLINK_MSG_ID_MISSION_ACK = 47
mavlink10.MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN = 48
mavlink10.MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN = 49
mavlink10.MAVLINK_MSG_ID_PARAM_MAP_RC = 50
mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_INT = 51
mavlink10.MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA = 54
mavlink10.MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA = 55
mavlink10.MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV = 61
mavlink10.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT = 62
mavlink10.MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV = 63
mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV = 64
mavlink10.MAVLINK_MSG_ID_RC_CHANNELS = 65
mavlink10.MAVLINK_MSG_ID_REQUEST_DATA_STREAM = 66
mavlink10.MAVLINK_MSG_ID_DATA_STREAM = 67
mavlink10.MAVLINK_MSG_ID_MANUAL_CONTROL = 69
mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE = 70
mavlink10.MAVLINK_MSG_ID_MISSION_ITEM_INT = 73
mavlink10.MAVLINK_MSG_ID_VFR_HUD = 74
mavlink10.MAVLINK_MSG_ID_COMMAND_INT = 75
mavlink10.MAVLINK_MSG_ID_COMMAND_LONG = 76
mavlink10.MAVLINK_MSG_ID_COMMAND_ACK = 77
mavlink10.MAVLINK_MSG_ID_MANUAL_SETPOINT = 81
mavlink10.MAVLINK_MSG_ID_SET_ATTITUDE_TARGET = 82
mavlink10.MAVLINK_MSG_ID_ATTITUDE_TARGET = 83
mavlink10.MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED = 84
mavlink10.MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED = 85
mavlink10.MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT = 86
mavlink10.MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT = 87
mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET = 89
mavlink10.MAVLINK_MSG_ID_HIL_STATE = 90
mavlink10.MAVLINK_MSG_ID_HIL_CONTROLS = 91
mavlink10.MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW = 92
mavlink10.MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS = 93
mavlink10.MAVLINK_MSG_ID_OPTICAL_FLOW = 100
mavlink10.MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE = 101
mavlink10.MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE = 102
mavlink10.MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE = 103
mavlink10.MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE = 104
mavlink10.MAVLINK_MSG_ID_HIGHRES_IMU = 105
mavlink10.MAVLINK_MSG_ID_OPTICAL_FLOW_RAD = 106
mavlink10.MAVLINK_MSG_ID_HIL_SENSOR = 107
mavlink10.MAVLINK_MSG_ID_SIM_STATE = 108
mavlink10.MAVLINK_MSG_ID_RADIO_STATUS = 109
mavlink10.MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL = 110
mavlink10.MAVLINK_MSG_ID_TIMESYNC = 111
mavlink10.MAVLINK_MSG_ID_CAMERA_TRIGGER = 112
mavlink10.MAVLINK_MSG_ID_HIL_GPS = 113
mavlink10.MAVLINK_MSG_ID_HIL_OPTICAL_FLOW = 114
mavlink10.MAVLINK_MSG_ID_HIL_STATE_QUATERNION = 115
mavlink10.MAVLINK_MSG_ID_SCALED_IMU2 = 116
mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_LIST = 117
mavlink10.MAVLINK_MSG_ID_LOG_ENTRY = 118
mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_DATA = 119
mavlink10.MAVLINK_MSG_ID_LOG_DATA = 120
mavlink10.MAVLINK_MSG_ID_LOG_ERASE = 121
mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_END = 122
mavlink10.MAVLINK_MSG_ID_GPS_INJECT_DATA = 123
mavlink10.MAVLINK_MSG_ID_GPS2_RAW = 124
mavlink10.MAVLINK_MSG_ID_POWER_STATUS = 125
mavlink10.MAVLINK_MSG_ID_SERIAL_CONTROL = 126
mavlink10.MAVLINK_MSG_ID_GPS_RTK = 127
mavlink10.MAVLINK_MSG_ID_GPS2_RTK = 128
mavlink10.MAVLINK_MSG_ID_SCALED_IMU3 = 129
mavlink10.MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE = 130
mavlink10.MAVLINK_MSG_ID_ENCAPSULATED_DATA = 131
mavlink10.MAVLINK_MSG_ID_DISTANCE_SENSOR = 132
mavlink10.MAVLINK_MSG_ID_TERRAIN_REQUEST = 133
mavlink10.MAVLINK_MSG_ID_TERRAIN_DATA = 134
mavlink10.MAVLINK_MSG_ID_TERRAIN_CHECK = 135
mavlink10.MAVLINK_MSG_ID_TERRAIN_REPORT = 136
mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE2 = 137
mavlink10.MAVLINK_MSG_ID_ATT_POS_MOCAP = 138
mavlink10.MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET = 139
mavlink10.MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET = 140
mavlink10.MAVLINK_MSG_ID_ALTITUDE = 141
mavlink10.MAVLINK_MSG_ID_RESOURCE_REQUEST = 142
mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE3 = 143
mavlink10.MAVLINK_MSG_ID_FOLLOW_TARGET = 144
mavlink10.MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE = 146
mavlink10.MAVLINK_MSG_ID_BATTERY_STATUS = 147
mavlink10.MAVLINK_MSG_ID_AUTOPILOT_VERSION = 148
mavlink10.MAVLINK_MSG_ID_LANDING_TARGET = 149
mavlink10.MAVLINK_MSG_ID_ESTIMATOR_STATUS = 230
mavlink10.MAVLINK_MSG_ID_WIND_COV = 231
mavlink10.MAVLINK_MSG_ID_GPS_INPUT = 232
mavlink10.MAVLINK_MSG_ID_GPS_RTCM_DATA = 233
mavlink10.MAVLINK_MSG_ID_HIGH_LATENCY = 234
mavlink10.MAVLINK_MSG_ID_HIGH_LATENCY2 = 235
mavlink10.MAVLINK_MSG_ID_VIBRATION = 241
mavlink10.MAVLINK_MSG_ID_HOME_POSITION = 242
mavlink10.MAVLINK_MSG_ID_SET_HOME_POSITION = 243
mavlink10.MAVLINK_MSG_ID_MESSAGE_INTERVAL = 244
mavlink10.MAVLINK_MSG_ID_EXTENDED_SYS_STATE = 245
mavlink10.MAVLINK_MSG_ID_ADSB_VEHICLE = 246
mavlink10.MAVLINK_MSG_ID_COLLISION = 247
mavlink10.MAVLINK_MSG_ID_V2_EXTENSION = 248
mavlink10.MAVLINK_MSG_ID_MEMORY_VECT = 249
mavlink10.MAVLINK_MSG_ID_DEBUG_VECT = 250
mavlink10.MAVLINK_MSG_ID_NAMED_VALUE_FLOAT = 251
mavlink10.MAVLINK_MSG_ID_NAMED_VALUE_INT = 252
mavlink10.MAVLINK_MSG_ID_STATUSTEXT = 253
mavlink10.MAVLINK_MSG_ID_DEBUG = 254
mavlink10.messages = {};

/* 


                lps_time                  : LPS_TIME (int32_t)
                odom_vaild                : If odometry is vaild (uint8_t)
                x                         : X Position (float)
                y                         : Y Position (float)
                z                         : Z Position (float)
                vx                        : X velocity (int16_t)
                vy                        : Y Velocity (int16_t)
                vz                        : Z Velocity (int16_t)
                roll                      : rol angle rad*1000 (int16_t)
                pitch                     : pitch angle rad*1000 (int16_t)
                yaw                       : Yaw angle rad*1000 (int16_t)
                remote_distance           : Distance to Remote Drone*1000 (uint16_t)

*/
mavlink10.messages.node_realtime_info = function(lps_time, odom_vaild, x, y, z, vx, vy, vz, roll, pitch, yaw, remote_distance) {

    this.format = '<ifffhhhhhh10HB';
    this.id = mavlink10.MAVLINK_MSG_ID_NODE_REALTIME_INFO;
    this.order_map = [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 161;
    this.name = 'NODE_REALTIME_INFO';

    this.fieldnames = ['lps_time', 'odom_vaild', 'x', 'y', 'z', 'vx', 'vy', 'vz', 'roll', 'pitch', 'yaw', 'remote_distance'];


    this.set(arguments);

}
        mavlink10.messages.node_realtime_info.prototype = new mavlink10.message;
mavlink10.messages.node_realtime_info.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.x, this.y, this.z, this.vx, this.vy, this.vz, this.roll, this.pitch, this.yaw, this.remote_distance, this.odom_vaild]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                target_id                 : Target ID of drone (uint8_t)
                rel_x                     : Relative X Position*1000 (int16_t)
                rel_y                     : Relative Y Position*1000 (int16_t)
                rel_z                     : Relative Z Position*1000 (int16_t)
                rel_yaw_offset            : Relative Yaw coorinate offset *1000 (int16_t)
                cov_x                     : X Position Cov*1000 (int16_t)
                cov_y                     : Y Position Cov*1000 (int16_t)
                cov_z                     : Z Position Cov*1000 (int16_t)
                cov_yaw                   : Yaw Cov*1000 (int16_t)

*/
mavlink10.messages.node_relative_fused = function(lps_time, target_id, rel_x, rel_y, rel_z, rel_yaw_offset, cov_x, cov_y, cov_z, cov_yaw) {

    this.format = '<ihhhhhhhhB';
    this.id = mavlink10.MAVLINK_MSG_ID_NODE_RELATIVE_FUSED;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 236;
    this.name = 'NODE_RELATIVE_FUSED';

    this.fieldnames = ['lps_time', 'target_id', 'rel_x', 'rel_y', 'rel_z', 'rel_yaw_offset', 'cov_x', 'cov_y', 'cov_z', 'cov_yaw'];


    this.set(arguments);

}
        mavlink10.messages.node_relative_fused.prototype = new mavlink10.message;
mavlink10.messages.node_relative_fused.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.rel_x, this.rel_y, this.rel_z, this.rel_yaw_offset, this.cov_x, this.cov_y, this.cov_z, this.cov_yaw, this.target_id]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                target_id                 : Target ID of drone (int8_t)
                command_type              : Onboard command type (uint8_t)
                param1                    : param1 (int32_t)
                param2                    : param2 (int32_t)
                param3                    : param3 (int32_t)
                param4                    : param4 (int32_t)
                param5                    : param5 (int32_t)
                param6                    : param6 (int32_t)
                param7                    : param7 (int32_t)
                param8                    : param8 (int32_t)
                param9                    : param9 (int32_t)
                param10                   : param10 (int32_t)

*/
mavlink10.messages.swarm_remote_command = function(lps_time, target_id, command_type, param1, param2, param3, param4, param5, param6, param7, param8, param9, param10) {

    this.format = '<iiiiiiiiiiibB';
    this.id = mavlink10.MAVLINK_MSG_ID_SWARM_REMOTE_COMMAND;
    this.order_map = [0, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 125;
    this.name = 'SWARM_REMOTE_COMMAND';

    this.fieldnames = ['lps_time', 'target_id', 'command_type', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7', 'param8', 'param9', 'param10'];


    this.set(arguments);

}
        mavlink10.messages.swarm_remote_command.prototype = new mavlink10.message;
mavlink10.messages.swarm_remote_command.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.param1, this.param2, this.param3, this.param4, this.param5, this.param6, this.param7, this.param8, this.param9, this.param10, this.target_id, this.command_type]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                id                        : Message ID detection (int64_t)
                target_id                 : Target ID of drone (int32_t)
                rel_x                     : Relative X Position (float)
                rel_y                     : Relative Y Position (float)
                rel_z                     : Relative Z Position (float)
                rel_yaw                   : Yaw of Detector (float)
                cov_x                     : Covariance of Relative X Position (float)
                cov_y                     : Covariance of Relative Y Position (float)
                cov_z                     : Covariance of Relative Z Position (float)
                cov_yaw                   : Covariance of Yaw of Detector (float)

*/
mavlink10.messages.node_detected = function(lps_time, id, target_id, rel_x, rel_y, rel_z, rel_yaw, cov_x, cov_y, cov_z, cov_yaw) {

    this.format = '<qiiffffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_NODE_DETECTED;
    this.order_map = [1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 80;
    this.name = 'NODE_DETECTED';

    this.fieldnames = ['lps_time', 'id', 'target_id', 'rel_x', 'rel_y', 'rel_z', 'rel_yaw', 'cov_x', 'cov_y', 'cov_z', 'cov_yaw'];


    this.set(arguments);

}
        mavlink10.messages.node_detected.prototype = new mavlink10.message;
mavlink10.messages.node_detected.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.id, this.lps_time, this.target_id, this.rel_x, this.rel_y, this.rel_z, this.rel_yaw, this.cov_x, this.cov_y, this.cov_z, this.cov_yaw]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                flight_status             : Flight status of drone (uint8_t)
                control_auth              : Control AUTH of drone (uint8_t)
                commander_mode            : COMMANDER MODE (uint8_t)
                input_mode                : CTRL INPUT MODE (uint8_t)
                rc_valid                  : RC VAILD (uint8_t)
                onboard_cmd_valid         : ONBOARD CMD VALID (uint8_t)
                sdk_valid                 : SDK VALID (uint8_t)
                vo_valid                  : VO VALID (uint8_t)
                vo_latency                : VO Latency (float)
                bat_vol                   : BATTERY_VOL (float)
                bat_remain                : BATTERY_REMAIN (float)
                x                         : X Position (float)
                y                         : Y Position (float)
                z                         : Z Position (float)
                yaw                       : Yaw (float)

*/
mavlink10.messages.drone_status = function(lps_time, flight_status, control_auth, commander_mode, input_mode, rc_valid, onboard_cmd_valid, sdk_valid, vo_valid, vo_latency, bat_vol, bat_remain, x, y, z, yaw) {

    this.format = '<ifffffffBBBBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_DRONE_STATUS;
    this.order_map = [0, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6, 7];
    this.crc_extra = 80;
    this.name = 'DRONE_STATUS';

    this.fieldnames = ['lps_time', 'flight_status', 'control_auth', 'commander_mode', 'input_mode', 'rc_valid', 'onboard_cmd_valid', 'sdk_valid', 'vo_valid', 'vo_latency', 'bat_vol', 'bat_remain', 'x', 'y', 'z', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.drone_status.prototype = new mavlink10.message;
mavlink10.messages.drone_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.vo_latency, this.bat_vol, this.bat_remain, this.x, this.y, this.z, this.yaw, this.flight_status, this.control_auth, this.commander_mode, this.input_mode, this.rc_valid, this.onboard_cmd_valid, this.sdk_valid, this.vo_valid]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                source_id                 : Source ID of drone (int8_t)
                x                         : X Position*1000 (int16_t)
                y                         : Y Position*1000 (int16_t)
                z                         : Z Position*1000 (int16_t)
                q0                        : QUAT W*10000 (int16_t)
                q1                        : QUAT X*10000 (int16_t)
                q2                        : QUAT Y*10000 (int16_t)
                q3                        : QUAT Z*10000 (int16_t)
                vx                        : Velocity_X*1000 (int16_t)
                vy                        : Velocity_Y*1000 (int16_t)
                vz                        : Velocity_Z*1000 (int16_t)

*/
mavlink10.messages.drone_odom_gt = function(lps_time, source_id, x, y, z, q0, q1, q2, q3, vx, vy, vz) {

    this.format = '<ihhhhhhhhhhb';
    this.id = mavlink10.MAVLINK_MSG_ID_DRONE_ODOM_GT;
    this.order_map = [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 225;
    this.name = 'DRONE_ODOM_GT';

    this.fieldnames = ['lps_time', 'source_id', 'x', 'y', 'z', 'q0', 'q1', 'q2', 'q3', 'vx', 'vy', 'vz'];


    this.set(arguments);

}
        mavlink10.messages.drone_odom_gt.prototype = new mavlink10.message;
mavlink10.messages.drone_odom_gt.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.x, this.y, this.z, this.q0, this.q1, this.q2, this.q3, this.vx, this.vy, this.vz, this.source_id]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                source_id                 : Source ID of drone (int8_t)
                x                         : X Position*1000 (int16_t)
                y                         : Y Position*1000 (int16_t)
                z                         : Z Position*1000 (int16_t)
                yaw                       : Yaw*1000 (int16_t)

*/
mavlink10.messages.drone_pose_gt = function(lps_time, source_id, x, y, z, yaw) {

    this.format = '<ihhhhb';
    this.id = mavlink10.MAVLINK_MSG_ID_DRONE_POSE_GT;
    this.order_map = [0, 5, 1, 2, 3, 4];
    this.crc_extra = 241;
    this.name = 'DRONE_POSE_GT';

    this.fieldnames = ['lps_time', 'source_id', 'x', 'y', 'z', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.drone_pose_gt.prototype = new mavlink10.message;
mavlink10.messages.drone_pose_gt.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.x, this.y, this.z, this.yaw, this.source_id]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                target_id                 : Target ID of drone (uint8_t)
                x                         : X Position*1000 (int16_t)
                y                         : Y Position*1000 (int16_t)
                z                         : Z Position*1000 (int16_t)
                yaw                       : Relative Yaw coorinate offset *1000 (int16_t)
                cov_x                     : X Position Cov*1000 (int16_t)
                cov_y                     : Y Position Cov*1000 (int16_t)
                cov_z                     : Z Position Cov*1000 (int16_t)
                cov_yaw                   : Yaw Cov*1000 (int16_t)

*/
mavlink10.messages.node_local_fused = function(lps_time, target_id, x, y, z, yaw, cov_x, cov_y, cov_z, cov_yaw) {

    this.format = '<ihhhhhhhhB';
    this.id = mavlink10.MAVLINK_MSG_ID_NODE_LOCAL_FUSED;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 225;
    this.name = 'NODE_LOCAL_FUSED';

    this.fieldnames = ['lps_time', 'target_id', 'x', 'y', 'z', 'yaw', 'cov_x', 'cov_y', 'cov_z', 'cov_yaw'];


    this.set(arguments);

}
        mavlink10.messages.node_local_fused.prototype = new mavlink10.message;
mavlink10.messages.node_local_fused.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.x, this.y, this.z, this.yaw, this.cov_x, this.cov_y, this.cov_z, this.cov_yaw, this.target_id]));
}

/* 


                lps_time                  : LPS_TIME (int32_t)
                target_id                 : Target ID of drone (uint8_t)
                rel_x                     : Relative X Position*1000 (int16_t)
                rel_y                     : Relative Y Position*1000 (int16_t)
                rel_z                     : Relative Z Position*1000 (int16_t)
                rel_yaw_offset            : Relative Yaw coorinate offset *1000 (int16_t)
                cov_x                     : X Position Cov*1000 (int16_t)
                cov_y                     : Y Position Cov*1000 (int16_t)
                cov_z                     : Z Position Cov*1000 (int16_t)
                cov_yaw                   : Yaw Cov*1000 (int16_t)

*/
mavlink10.messages.node_based_fused = function(lps_time, target_id, rel_x, rel_y, rel_z, rel_yaw_offset, cov_x, cov_y, cov_z, cov_yaw) {

    this.format = '<ihhhhhhhhB';
    this.id = mavlink10.MAVLINK_MSG_ID_NODE_BASED_FUSED;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 216;
    this.name = 'NODE_BASED_FUSED';

    this.fieldnames = ['lps_time', 'target_id', 'rel_x', 'rel_y', 'rel_z', 'rel_yaw_offset', 'cov_x', 'cov_y', 'cov_z', 'cov_yaw'];


    this.set(arguments);

}
        mavlink10.messages.node_based_fused.prototype = new mavlink10.message;
mavlink10.messages.node_based_fused.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lps_time, this.rel_x, this.rel_y, this.rel_z, this.rel_yaw_offset, this.cov_x, this.cov_y, this.cov_z, this.cov_yaw, this.target_id]));
}

/* 
The heartbeat message shows that a system is present and responding.
The type of the MAV and Autopilot hardware allow the receiving system
to treat further messages from this system appropriate (e.g. by laying
out the user interface based on the autopilot).

                type                      : Type of the MAV (quadrotor, helicopter, etc.) (uint8_t)
                autopilot                 : Autopilot type / class. (uint8_t)
                base_mode                 : System mode bitmap. (uint8_t)
                custom_mode               : A bitfield for use for autopilot-specific flags (uint32_t)
                system_status             : System status flag. (uint8_t)
                mavlink_version           : MAVLink version, not writable by user, gets added by protocol because of magic data type: uint8_t_mavlink_version (uint8_t)

*/
mavlink10.messages.heartbeat = function(type, autopilot, base_mode, custom_mode, system_status, mavlink_version) {

    this.format = '<IBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_HEARTBEAT;
    this.order_map = [1, 2, 3, 0, 4, 5];
    this.crc_extra = 50;
    this.name = 'HEARTBEAT';

    this.fieldnames = ['type', 'autopilot', 'base_mode', 'custom_mode', 'system_status', 'mavlink_version'];


    this.set(arguments);

}
        mavlink10.messages.heartbeat.prototype = new mavlink10.message;
mavlink10.messages.heartbeat.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.custom_mode, this.type, this.autopilot, this.base_mode, this.system_status, this.mavlink_version]));
}

/* 
The general system state. If the system is following the MAVLink
standard, the system state is mainly defined by three orthogonal
states/modes: The system mode, which is either LOCKED (motors shut
down and locked), MANUAL (system under RC control), GUIDED (system
with autonomous position control, position setpoint controlled
manually) or AUTO (system guided by path/waypoint planner). The
NAV_MODE defined the current flight state: LIFTOFF (often an open-loop
maneuver), LANDING, WAYPOINTS or VECTOR. This represents the internal
navigation state machine. The system status shows whether the system
is currently active or not and if an emergency occurred. During the
CRITICAL and EMERGENCY states the MAV is still considered to be
active, but should start emergency procedures autonomously. After a
failure occurred it should first move from active to critical to allow
manual intervention and then move to emergency after a certain
timeout.

                onboard_control_sensors_present        : Bitmap showing which onboard controllers and sensors are present. Value of 0: not present. Value of 1: present. (uint32_t)
                onboard_control_sensors_enabled        : Bitmap showing which onboard controllers and sensors are enabled:  Value of 0: not enabled. Value of 1: enabled. (uint32_t)
                onboard_control_sensors_health        : Bitmap showing which onboard controllers and sensors are operational or have an error:  Value of 0: not enabled. Value of 1: enabled. (uint32_t)
                load                      : Maximum usage in percent of the mainloop time. Values: [0-1000] - should always be below 1000 (uint16_t)
                voltage_battery           : Battery voltage (uint16_t)
                current_battery           : Battery current, -1: autopilot does not measure the current (int16_t)
                battery_remaining         : Remaining battery energy, -1: autopilot estimate the remaining battery (int8_t)
                drop_rate_comm            : Communication drop rate, (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t)
                errors_comm               : Communication errors (UART, I2C, SPI, CAN), dropped packets on all links (packets that were corrupted on reception on the MAV) (uint16_t)
                errors_count1             : Autopilot-specific errors (uint16_t)
                errors_count2             : Autopilot-specific errors (uint16_t)
                errors_count3             : Autopilot-specific errors (uint16_t)
                errors_count4             : Autopilot-specific errors (uint16_t)

*/
mavlink10.messages.sys_status = function(onboard_control_sensors_present, onboard_control_sensors_enabled, onboard_control_sensors_health, load, voltage_battery, current_battery, battery_remaining, drop_rate_comm, errors_comm, errors_count1, errors_count2, errors_count3, errors_count4) {

    this.format = '<IIIHHhHHHHHHb';
    this.id = mavlink10.MAVLINK_MSG_ID_SYS_STATUS;
    this.order_map = [0, 1, 2, 3, 4, 5, 12, 6, 7, 8, 9, 10, 11];
    this.crc_extra = 124;
    this.name = 'SYS_STATUS';

    this.fieldnames = ['onboard_control_sensors_present', 'onboard_control_sensors_enabled', 'onboard_control_sensors_health', 'load', 'voltage_battery', 'current_battery', 'battery_remaining', 'drop_rate_comm', 'errors_comm', 'errors_count1', 'errors_count2', 'errors_count3', 'errors_count4'];


    this.set(arguments);

}
        mavlink10.messages.sys_status.prototype = new mavlink10.message;
mavlink10.messages.sys_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.onboard_control_sensors_present, this.onboard_control_sensors_enabled, this.onboard_control_sensors_health, this.load, this.voltage_battery, this.current_battery, this.drop_rate_comm, this.errors_comm, this.errors_count1, this.errors_count2, this.errors_count3, this.errors_count4, this.battery_remaining]));
}

/* 
The system time is the time of the master clock, typically the
computer clock of the main onboard computer.

                time_unix_usec            : Timestamp (UNIX epoch time). (uint64_t)
                time_boot_ms              : Timestamp (time since system boot). (uint32_t)

*/
mavlink10.messages.system_time = function(time_unix_usec, time_boot_ms) {

    this.format = '<QI';
    this.id = mavlink10.MAVLINK_MSG_ID_SYSTEM_TIME;
    this.order_map = [0, 1];
    this.crc_extra = 137;
    this.name = 'SYSTEM_TIME';

    this.fieldnames = ['time_unix_usec', 'time_boot_ms'];


    this.set(arguments);

}
        mavlink10.messages.system_time.prototype = new mavlink10.message;
mavlink10.messages.system_time.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_unix_usec, this.time_boot_ms]));
}

/* 
A ping message either requesting or responding to a ping. This allows
to measure the system latencies, including serial port, radio modem
and UDP connections.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                seq                       : PING sequence (uint32_t)
                target_system             : 0: request ping from all receiving systems, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t)
                target_component          : 0: request ping from all receiving components, if greater than 0: message is a ping response and number is the system id of the requesting system (uint8_t)

*/
mavlink10.messages.ping = function(time_usec, seq, target_system, target_component) {

    this.format = '<QIBB';
    this.id = mavlink10.MAVLINK_MSG_ID_PING;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 237;
    this.name = 'PING';

    this.fieldnames = ['time_usec', 'seq', 'target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.ping.prototype = new mavlink10.message;
mavlink10.messages.ping.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.seq, this.target_system, this.target_component]));
}

/* 
Request to control this MAV

                target_system             : System the GCS requests control for (uint8_t)
                control_request           : 0: request control of this MAV, 1: Release control of this MAV (uint8_t)
                version                   : 0: key as plaintext, 1-255: future, different hashing/encryption variants. The GCS should in general use the safest mode possible initially and then gradually move down the encryption level if it gets a NACK message indicating an encryption mismatch. (uint8_t)
                passkey                   : Password / Key, depending on version plaintext or encrypted. 25 or less characters, NULL terminated. The characters may involve A-Z, a-z, 0-9, and "!?,.-" (char)

*/
mavlink10.messages.change_operator_control = function(target_system, control_request, version, passkey) {

    this.format = '<BBB25s';
    this.id = mavlink10.MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 217;
    this.name = 'CHANGE_OPERATOR_CONTROL';

    this.fieldnames = ['target_system', 'control_request', 'version', 'passkey'];


    this.set(arguments);

}
        mavlink10.messages.change_operator_control.prototype = new mavlink10.message;
mavlink10.messages.change_operator_control.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.control_request, this.version, this.passkey]));
}

/* 
Accept / deny control of this MAV

                gcs_system_id             : ID of the GCS this message (uint8_t)
                control_request           : 0: request control of this MAV, 1: Release control of this MAV (uint8_t)
                ack                       : 0: ACK, 1: NACK: Wrong passkey, 2: NACK: Unsupported passkey encryption method, 3: NACK: Already under control (uint8_t)

*/
mavlink10.messages.change_operator_control_ack = function(gcs_system_id, control_request, ack) {

    this.format = '<BBB';
    this.id = mavlink10.MAVLINK_MSG_ID_CHANGE_OPERATOR_CONTROL_ACK;
    this.order_map = [0, 1, 2];
    this.crc_extra = 104;
    this.name = 'CHANGE_OPERATOR_CONTROL_ACK';

    this.fieldnames = ['gcs_system_id', 'control_request', 'ack'];


    this.set(arguments);

}
        mavlink10.messages.change_operator_control_ack.prototype = new mavlink10.message;
mavlink10.messages.change_operator_control_ack.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.gcs_system_id, this.control_request, this.ack]));
}

/* 
Emit an encrypted signature / key identifying this system. PLEASE
NOTE: This protocol has been kept simple, so transmitting the key
requires an encrypted channel for true safety.

                key                       : key (char)

*/
mavlink10.messages.auth_key = function(key) {

    this.format = '<32s';
    this.id = mavlink10.MAVLINK_MSG_ID_AUTH_KEY;
    this.order_map = [0];
    this.crc_extra = 119;
    this.name = 'AUTH_KEY';

    this.fieldnames = ['key'];


    this.set(arguments);

}
        mavlink10.messages.auth_key.prototype = new mavlink10.message;
mavlink10.messages.auth_key.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.key]));
}

/* 
Set the system mode, as defined by enum MAV_MODE. There is no target
component id as the mode is by definition for the overall aircraft,
not only for one component.

                target_system             : The system setting the mode (uint8_t)
                base_mode                 : The new base mode. (uint8_t)
                custom_mode               : The new autopilot-specific mode. This field can be ignored by an autopilot. (uint32_t)

*/
mavlink10.messages.set_mode = function(target_system, base_mode, custom_mode) {

    this.format = '<IBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_MODE;
    this.order_map = [1, 2, 0];
    this.crc_extra = 89;
    this.name = 'SET_MODE';

    this.fieldnames = ['target_system', 'base_mode', 'custom_mode'];


    this.set(arguments);

}
        mavlink10.messages.set_mode.prototype = new mavlink10.message;
mavlink10.messages.set_mode.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.custom_mode, this.target_system, this.base_mode]));
}

/* 
Request to read the onboard parameter with the param_id string id.
Onboard parameters are stored as key[const char*] -> value[float].
This allows to send a parameter to any other component (such as the
GCS) without the need of previous knowledge of possible parameter
names. Thus the same GCS can store different parameters for different
autopilots. See also https://mavlink.io/en/protocol/parameter.html for
a full documentation of QGroundControl and IMU code.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                param_id                  : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char)
                param_index               : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored) (int16_t)

*/
mavlink10.messages.param_request_read = function(target_system, target_component, param_id, param_index) {

    this.format = '<hBB16s';
    this.id = mavlink10.MAVLINK_MSG_ID_PARAM_REQUEST_READ;
    this.order_map = [1, 2, 3, 0];
    this.crc_extra = 214;
    this.name = 'PARAM_REQUEST_READ';

    this.fieldnames = ['target_system', 'target_component', 'param_id', 'param_index'];


    this.set(arguments);

}
        mavlink10.messages.param_request_read.prototype = new mavlink10.message;
mavlink10.messages.param_request_read.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param_index, this.target_system, this.target_component, this.param_id]));
}

/* 
Request all parameters of this component. After this request, all
parameters are emitted.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)

*/
mavlink10.messages.param_request_list = function(target_system, target_component) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_PARAM_REQUEST_LIST;
    this.order_map = [0, 1];
    this.crc_extra = 159;
    this.name = 'PARAM_REQUEST_LIST';

    this.fieldnames = ['target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.param_request_list.prototype = new mavlink10.message;
mavlink10.messages.param_request_list.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component]));
}

/* 
Emit the value of a onboard parameter. The inclusion of param_count
and param_index in the message allows the recipient to keep track of
received parameters and allows him to re-request missing parameters
after a loss or timeout.

                param_id                  : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char)
                param_value               : Onboard parameter value (float)
                param_type                : Onboard parameter type. (uint8_t)
                param_count               : Total number of onboard parameters (uint16_t)
                param_index               : Index of this onboard parameter (uint16_t)

*/
mavlink10.messages.param_value = function(param_id, param_value, param_type, param_count, param_index) {

    this.format = '<fHH16sB';
    this.id = mavlink10.MAVLINK_MSG_ID_PARAM_VALUE;
    this.order_map = [3, 0, 4, 1, 2];
    this.crc_extra = 220;
    this.name = 'PARAM_VALUE';

    this.fieldnames = ['param_id', 'param_value', 'param_type', 'param_count', 'param_index'];


    this.set(arguments);

}
        mavlink10.messages.param_value.prototype = new mavlink10.message;
mavlink10.messages.param_value.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param_value, this.param_count, this.param_index, this.param_id, this.param_type]));
}

/* 
Set a parameter value TEMPORARILY to RAM. It will be reset to default
on system reboot. Send the ACTION MAV_ACTION_STORAGE_WRITE to
PERMANENTLY write the RAM contents to EEPROM. IMPORTANT: The receiving
component should acknowledge the new parameter value by sending a
param_value message to all communication partners. This will also
ensure that multiple GCS all have an up-to-date list of all
parameters. If the sending GCS did not receive a PARAM_VALUE message
within its timeout time, it should re-send the PARAM_SET message.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                param_id                  : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char)
                param_value               : Onboard parameter value (float)
                param_type                : Onboard parameter type. (uint8_t)

*/
mavlink10.messages.param_set = function(target_system, target_component, param_id, param_value, param_type) {

    this.format = '<fBB16sB';
    this.id = mavlink10.MAVLINK_MSG_ID_PARAM_SET;
    this.order_map = [1, 2, 3, 0, 4];
    this.crc_extra = 168;
    this.name = 'PARAM_SET';

    this.fieldnames = ['target_system', 'target_component', 'param_id', 'param_value', 'param_type'];


    this.set(arguments);

}
        mavlink10.messages.param_set.prototype = new mavlink10.message;
mavlink10.messages.param_set.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param_value, this.target_system, this.target_component, this.param_id, this.param_type]));
}

/* 
The global position, as returned by the Global Positioning System
(GPS). This is                 NOT the global position estimate of the
system, but rather a RAW sensor value. See message GLOBAL_POSITION for
the global position estimate.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                fix_type                  : GPS fix type. (uint8_t)
                lat                       : Latitude (WGS84, EGM96 ellipsoid) (int32_t)
                lon                       : Longitude (WGS84, EGM96 ellipsoid) (int32_t)
                alt                       : Altitude (AMSL). Positive for up. Note that virtually all GPS modules provide the AMSL altitude in addition to the WGS84 altitude. (int32_t)
                eph                       : GPS HDOP horizontal dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t)
                epv                       : GPS VDOP vertical dilution of position (unitless). If unknown, set to: UINT16_MAX (uint16_t)
                vel                       : GPS ground speed. If unknown, set to: UINT16_MAX (uint16_t)
                cog                       : Course over ground (NOT heading, but direction of movement) in degrees * 100, 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t)
                satellites_visible        : Number of satellites visible. If unknown, set to 255 (uint8_t)

*/
mavlink10.messages.gps_raw_int = function(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible) {

    this.format = '<QiiiHHHHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_RAW_INT;
    this.order_map = [0, 8, 1, 2, 3, 4, 5, 6, 7, 9];
    this.crc_extra = 24;
    this.name = 'GPS_RAW_INT';

    this.fieldnames = ['time_usec', 'fix_type', 'lat', 'lon', 'alt', 'eph', 'epv', 'vel', 'cog', 'satellites_visible'];


    this.set(arguments);

}
        mavlink10.messages.gps_raw_int.prototype = new mavlink10.message;
mavlink10.messages.gps_raw_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.lat, this.lon, this.alt, this.eph, this.epv, this.vel, this.cog, this.fix_type, this.satellites_visible]));
}

/* 
The positioning status, as reported by GPS. This message is intended
to display status information about each satellite visible to the
receiver. See message GLOBAL_POSITION for the global position
estimate. This message can contain information for up to 20
satellites.

                satellites_visible        : Number of satellites visible (uint8_t)
                satellite_prn             : Global satellite ID (uint8_t)
                satellite_used            : 0: Satellite not used, 1: used for localization (uint8_t)
                satellite_elevation        : Elevation (0: right on top of receiver, 90: on the horizon) of satellite (uint8_t)
                satellite_azimuth         : Direction of satellite, 0: 0 deg, 255: 360 deg. (uint8_t)
                satellite_snr             : Signal to noise ratio of satellite (uint8_t)

*/
mavlink10.messages.gps_status = function(satellites_visible, satellite_prn, satellite_used, satellite_elevation, satellite_azimuth, satellite_snr) {

    this.format = '<B20s20s20s20s20s';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_STATUS;
    this.order_map = [0, 1, 2, 3, 4, 5];
    this.crc_extra = 23;
    this.name = 'GPS_STATUS';

    this.fieldnames = ['satellites_visible', 'satellite_prn', 'satellite_used', 'satellite_elevation', 'satellite_azimuth', 'satellite_snr'];


    this.set(arguments);

}
        mavlink10.messages.gps_status.prototype = new mavlink10.message;
mavlink10.messages.gps_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.satellites_visible, this.satellite_prn, this.satellite_used, this.satellite_elevation, this.satellite_azimuth, this.satellite_snr]));
}

/* 
The RAW IMU readings for the usual 9DOF sensor setup. This message
should contain the scaled values to the described units

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                xacc                      : X acceleration (int16_t)
                yacc                      : Y acceleration (int16_t)
                zacc                      : Z acceleration (int16_t)
                xgyro                     : Angular speed around X axis (int16_t)
                ygyro                     : Angular speed around Y axis (int16_t)
                zgyro                     : Angular speed around Z axis (int16_t)
                xmag                      : X Magnetic field (int16_t)
                ymag                      : Y Magnetic field (int16_t)
                zmag                      : Z Magnetic field (int16_t)

*/
mavlink10.messages.scaled_imu = function(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) {

    this.format = '<Ihhhhhhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_IMU;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 170;
    this.name = 'SCALED_IMU';

    this.fieldnames = ['time_boot_ms', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag'];


    this.set(arguments);

}
        mavlink10.messages.scaled_imu.prototype = new mavlink10.message;
mavlink10.messages.scaled_imu.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag]));
}

/* 
The RAW IMU readings for the usual 9DOF sensor setup. This message
should always contain the true raw values without any scaling to allow
data capture and system debugging.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                xacc                      : X acceleration (raw) (int16_t)
                yacc                      : Y acceleration (raw) (int16_t)
                zacc                      : Z acceleration (raw) (int16_t)
                xgyro                     : Angular speed around X axis (raw) (int16_t)
                ygyro                     : Angular speed around Y axis (raw) (int16_t)
                zgyro                     : Angular speed around Z axis (raw) (int16_t)
                xmag                      : X Magnetic field (raw) (int16_t)
                ymag                      : Y Magnetic field (raw) (int16_t)
                zmag                      : Z Magnetic field (raw) (int16_t)

*/
mavlink10.messages.raw_imu = function(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) {

    this.format = '<Qhhhhhhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_RAW_IMU;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 144;
    this.name = 'RAW_IMU';

    this.fieldnames = ['time_usec', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag'];


    this.set(arguments);

}
        mavlink10.messages.raw_imu.prototype = new mavlink10.message;
mavlink10.messages.raw_imu.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag]));
}

/* 
The RAW pressure readings for the typical setup of one absolute
pressure and one differential pressure sensor. The sensor values
should be the raw, UNSCALED ADC values.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                press_abs                 : Absolute pressure (raw) (int16_t)
                press_diff1               : Differential pressure 1 (raw, 0 if nonexistent) (int16_t)
                press_diff2               : Differential pressure 2 (raw, 0 if nonexistent) (int16_t)
                temperature               : Raw Temperature measurement (raw) (int16_t)

*/
mavlink10.messages.raw_pressure = function(time_usec, press_abs, press_diff1, press_diff2, temperature) {

    this.format = '<Qhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_RAW_PRESSURE;
    this.order_map = [0, 1, 2, 3, 4];
    this.crc_extra = 67;
    this.name = 'RAW_PRESSURE';

    this.fieldnames = ['time_usec', 'press_abs', 'press_diff1', 'press_diff2', 'temperature'];


    this.set(arguments);

}
        mavlink10.messages.raw_pressure.prototype = new mavlink10.message;
mavlink10.messages.raw_pressure.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.press_abs, this.press_diff1, this.press_diff2, this.temperature]));
}

/* 
The pressure readings for the typical setup of one absolute and
differential pressure sensor. The units are as specified in each
field.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                press_abs                 : Absolute pressure (float)
                press_diff                : Differential pressure 1 (float)
                temperature               : Temperature (int16_t)

*/
mavlink10.messages.scaled_pressure = function(time_boot_ms, press_abs, press_diff, temperature) {

    this.format = '<Iffh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 115;
    this.name = 'SCALED_PRESSURE';

    this.fieldnames = ['time_boot_ms', 'press_abs', 'press_diff', 'temperature'];


    this.set(arguments);

}
        mavlink10.messages.scaled_pressure.prototype = new mavlink10.message;
mavlink10.messages.scaled_pressure.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.press_abs, this.press_diff, this.temperature]));
}

/* 
The attitude in the aeronautical frame (right-handed, Z-down, X-front,
Y-right).

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                roll                      : Roll angle (-pi..+pi) (float)
                pitch                     : Pitch angle (-pi..+pi) (float)
                yaw                       : Yaw angle (-pi..+pi) (float)
                rollspeed                 : Roll angular speed (float)
                pitchspeed                : Pitch angular speed (float)
                yawspeed                  : Yaw angular speed (float)

*/
mavlink10.messages.attitude = function(time_boot_ms, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed) {

    this.format = '<Iffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_ATTITUDE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 39;
    this.name = 'ATTITUDE';

    this.fieldnames = ['time_boot_ms', 'roll', 'pitch', 'yaw', 'rollspeed', 'pitchspeed', 'yawspeed'];


    this.set(arguments);

}
        mavlink10.messages.attitude.prototype = new mavlink10.message;
mavlink10.messages.attitude.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.roll, this.pitch, this.yaw, this.rollspeed, this.pitchspeed, this.yawspeed]));
}

/* 
The attitude in the aeronautical frame (right-handed, Z-down, X-front,
Y-right), expressed as quaternion. Quaternion order is w, x, y, z and
a zero rotation would be expressed as (1 0 0 0).

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                q1                        : Quaternion component 1, w (1 in null-rotation) (float)
                q2                        : Quaternion component 2, x (0 in null-rotation) (float)
                q3                        : Quaternion component 3, y (0 in null-rotation) (float)
                q4                        : Quaternion component 4, z (0 in null-rotation) (float)
                rollspeed                 : Roll angular speed (float)
                pitchspeed                : Pitch angular speed (float)
                yawspeed                  : Yaw angular speed (float)

*/
mavlink10.messages.attitude_quaternion = function(time_boot_ms, q1, q2, q3, q4, rollspeed, pitchspeed, yawspeed) {

    this.format = '<Ifffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7];
    this.crc_extra = 246;
    this.name = 'ATTITUDE_QUATERNION';

    this.fieldnames = ['time_boot_ms', 'q1', 'q2', 'q3', 'q4', 'rollspeed', 'pitchspeed', 'yawspeed'];


    this.set(arguments);

}
        mavlink10.messages.attitude_quaternion.prototype = new mavlink10.message;
mavlink10.messages.attitude_quaternion.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.q1, this.q2, this.q3, this.q4, this.rollspeed, this.pitchspeed, this.yawspeed]));
}

/* 
The filtered local position (e.g. fused computer vision and
accelerometers). Coordinate frame is right-handed, Z-axis down
(aeronautical frame, NED / north-east-down convention)

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                x                         : X Position (float)
                y                         : Y Position (float)
                z                         : Z Position (float)
                vx                        : X Speed (float)
                vy                        : Y Speed (float)
                vz                        : Z Speed (float)

*/
mavlink10.messages.local_position_ned = function(time_boot_ms, x, y, z, vx, vy, vz) {

    this.format = '<Iffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 185;
    this.name = 'LOCAL_POSITION_NED';

    this.fieldnames = ['time_boot_ms', 'x', 'y', 'z', 'vx', 'vy', 'vz'];


    this.set(arguments);

}
        mavlink10.messages.local_position_ned.prototype = new mavlink10.message;
mavlink10.messages.local_position_ned.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.x, this.y, this.z, this.vx, this.vy, this.vz]));
}

/* 
The filtered global position (e.g. fused GPS and accelerometers). The
position is in GPS-frame (right-handed, Z-up). It                is
designed as scaled integer message since the resolution of float is
not sufficient.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                lat                       : Latitude, expressed (int32_t)
                lon                       : Longitude, expressed (int32_t)
                alt                       : Altitude (AMSL). Note that virtually all GPS modules provide both WGS84 and AMSL. (int32_t)
                relative_alt              : Altitude above ground (int32_t)
                vx                        : Ground X Speed (Latitude, positive north) (int16_t)
                vy                        : Ground Y Speed (Longitude, positive east) (int16_t)
                vz                        : Ground Z Speed (Altitude, positive down) (int16_t)
                hdg                       : Vehicle heading (yaw angle), 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t)

*/
mavlink10.messages.global_position_int = function(time_boot_ms, lat, lon, alt, relative_alt, vx, vy, vz, hdg) {

    this.format = '<IiiiihhhH';
    this.id = mavlink10.MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 104;
    this.name = 'GLOBAL_POSITION_INT';

    this.fieldnames = ['time_boot_ms', 'lat', 'lon', 'alt', 'relative_alt', 'vx', 'vy', 'vz', 'hdg'];


    this.set(arguments);

}
        mavlink10.messages.global_position_int.prototype = new mavlink10.message;
mavlink10.messages.global_position_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.lat, this.lon, this.alt, this.relative_alt, this.vx, this.vy, this.vz, this.hdg]));
}

/* 
The scaled values of the RC channels received: (-100%) -10000, (0%) 0,
(100%) 10000. Channels that are inactive should be set to UINT16_MAX.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                port                      : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t)
                chan1_scaled              : RC channel 1 value scaled. (int16_t)
                chan2_scaled              : RC channel 2 value scaled. (int16_t)
                chan3_scaled              : RC channel 3 value scaled. (int16_t)
                chan4_scaled              : RC channel 4 value scaled. (int16_t)
                chan5_scaled              : RC channel 5 value scaled. (int16_t)
                chan6_scaled              : RC channel 6 value scaled. (int16_t)
                chan7_scaled              : RC channel 7 value scaled. (int16_t)
                chan8_scaled              : RC channel 8 value scaled. (int16_t)
                rssi                      : Receive signal strength indicator. Values: [0-100], 255: invalid/unknown. (uint8_t)

*/
mavlink10.messages.rc_channels_scaled = function(time_boot_ms, port, chan1_scaled, chan2_scaled, chan3_scaled, chan4_scaled, chan5_scaled, chan6_scaled, chan7_scaled, chan8_scaled, rssi) {

    this.format = '<IhhhhhhhhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_SCALED;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 10];
    this.crc_extra = 237;
    this.name = 'RC_CHANNELS_SCALED';

    this.fieldnames = ['time_boot_ms', 'port', 'chan1_scaled', 'chan2_scaled', 'chan3_scaled', 'chan4_scaled', 'chan5_scaled', 'chan6_scaled', 'chan7_scaled', 'chan8_scaled', 'rssi'];


    this.set(arguments);

}
        mavlink10.messages.rc_channels_scaled.prototype = new mavlink10.message;
mavlink10.messages.rc_channels_scaled.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.chan1_scaled, this.chan2_scaled, this.chan3_scaled, this.chan4_scaled, this.chan5_scaled, this.chan6_scaled, this.chan7_scaled, this.chan8_scaled, this.port, this.rssi]));
}

/* 
The RAW values of the RC channels received. The standard PPM
modulation is as follows: 1000 microseconds: 0%, 2000 microseconds:
100%. A value of UINT16_MAX implies the channel is unused. Individual
receivers/transmitters might violate this specification.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                port                      : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows for more than 8 servos. (uint8_t)
                chan1_raw                 : RC channel 1 value. (uint16_t)
                chan2_raw                 : RC channel 2 value. (uint16_t)
                chan3_raw                 : RC channel 3 value. (uint16_t)
                chan4_raw                 : RC channel 4 value. (uint16_t)
                chan5_raw                 : RC channel 5 value. (uint16_t)
                chan6_raw                 : RC channel 6 value. (uint16_t)
                chan7_raw                 : RC channel 7 value. (uint16_t)
                chan8_raw                 : RC channel 8 value. (uint16_t)
                rssi                      : Receive signal strength indicator. Values: [0-100], 255: invalid/unknown. (uint8_t)

*/
mavlink10.messages.rc_channels_raw = function(time_boot_ms, port, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, rssi) {

    this.format = '<IHHHHHHHHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_RAW;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 10];
    this.crc_extra = 244;
    this.name = 'RC_CHANNELS_RAW';

    this.fieldnames = ['time_boot_ms', 'port', 'chan1_raw', 'chan2_raw', 'chan3_raw', 'chan4_raw', 'chan5_raw', 'chan6_raw', 'chan7_raw', 'chan8_raw', 'rssi'];


    this.set(arguments);

}
        mavlink10.messages.rc_channels_raw.prototype = new mavlink10.message;
mavlink10.messages.rc_channels_raw.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.chan1_raw, this.chan2_raw, this.chan3_raw, this.chan4_raw, this.chan5_raw, this.chan6_raw, this.chan7_raw, this.chan8_raw, this.port, this.rssi]));
}

/* 
The RAW values of the servo outputs (for RC input from the remote, use
the RC_CHANNELS messages). The standard PPM modulation is as follows:
1000 microseconds: 0%, 2000 microseconds: 100%.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint32_t)
                port                      : Servo output port (set of 8 outputs = 1 port). Most MAVs will just use one, but this allows to encode more than 8 servos. (uint8_t)
                servo1_raw                : Servo output 1 value (uint16_t)
                servo2_raw                : Servo output 2 value (uint16_t)
                servo3_raw                : Servo output 3 value (uint16_t)
                servo4_raw                : Servo output 4 value (uint16_t)
                servo5_raw                : Servo output 5 value (uint16_t)
                servo6_raw                : Servo output 6 value (uint16_t)
                servo7_raw                : Servo output 7 value (uint16_t)
                servo8_raw                : Servo output 8 value (uint16_t)

*/
mavlink10.messages.servo_output_raw = function(time_usec, port, servo1_raw, servo2_raw, servo3_raw, servo4_raw, servo5_raw, servo6_raw, servo7_raw, servo8_raw) {

    this.format = '<IHHHHHHHHB';
    this.id = mavlink10.MAVLINK_MSG_ID_SERVO_OUTPUT_RAW;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 222;
    this.name = 'SERVO_OUTPUT_RAW';

    this.fieldnames = ['time_usec', 'port', 'servo1_raw', 'servo2_raw', 'servo3_raw', 'servo4_raw', 'servo5_raw', 'servo6_raw', 'servo7_raw', 'servo8_raw'];


    this.set(arguments);

}
        mavlink10.messages.servo_output_raw.prototype = new mavlink10.message;
mavlink10.messages.servo_output_raw.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.servo1_raw, this.servo2_raw, this.servo3_raw, this.servo4_raw, this.servo5_raw, this.servo6_raw, this.servo7_raw, this.servo8_raw, this.port]));
}

/* 
Request a partial list of mission items from the system/component.
https://mavlink.io/en/protocol/mission.html. If start and end index
are the same, just send one waypoint.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                start_index               : Start index, 0 by default (int16_t)
                end_index                 : End index, -1 by default (-1: send list to end). Else a valid index of the list (int16_t)

*/
mavlink10.messages.mission_request_partial_list = function(target_system, target_component, start_index, end_index) {

    this.format = '<hhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_PARTIAL_LIST;
    this.order_map = [2, 3, 0, 1];
    this.crc_extra = 212;
    this.name = 'MISSION_REQUEST_PARTIAL_LIST';

    this.fieldnames = ['target_system', 'target_component', 'start_index', 'end_index'];


    this.set(arguments);

}
        mavlink10.messages.mission_request_partial_list.prototype = new mavlink10.message;
mavlink10.messages.mission_request_partial_list.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.start_index, this.end_index, this.target_system, this.target_component]));
}

/* 
This message is sent to the MAV to write a partial list. If start
index == end index, only one item will be transmitted / updated. If
the start index is NOT 0 and above the current list size, this request
should be REJECTED!

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                start_index               : Start index, 0 by default and smaller / equal to the largest index of the current onboard list. (int16_t)
                end_index                 : End index, equal or greater than start index. (int16_t)

*/
mavlink10.messages.mission_write_partial_list = function(target_system, target_component, start_index, end_index) {

    this.format = '<hhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_WRITE_PARTIAL_LIST;
    this.order_map = [2, 3, 0, 1];
    this.crc_extra = 9;
    this.name = 'MISSION_WRITE_PARTIAL_LIST';

    this.fieldnames = ['target_system', 'target_component', 'start_index', 'end_index'];


    this.set(arguments);

}
        mavlink10.messages.mission_write_partial_list.prototype = new mavlink10.message;
mavlink10.messages.mission_write_partial_list.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.start_index, this.end_index, this.target_system, this.target_component]));
}

/* 
Message encoding a mission item. This message is emitted to announce
the presence of a mission item and to set a mission item on the
system. The mission item can be either in x, y, z meters (type: LOCAL)
or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed
(NED), global frame is Z-up, right handed (ENU). See also
https://mavlink.io/en/protocol/mission.html.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                seq                       : Sequence (uint16_t)
                frame                     : The coordinate system of the waypoint. (uint8_t)
                command                   : The scheduled action for the waypoint. (uint16_t)
                current                   : false:0, true:1 (uint8_t)
                autocontinue              : Autocontinue to next waypoint (uint8_t)
                param1                    : PARAM1, see MAV_CMD enum (float)
                param2                    : PARAM2, see MAV_CMD enum (float)
                param3                    : PARAM3, see MAV_CMD enum (float)
                param4                    : PARAM4, see MAV_CMD enum (float)
                x                         : PARAM5 / local: X coordinate, global: latitude (float)
                y                         : PARAM6 / local: Y coordinate, global: longitude (float)
                z                         : PARAM7 / local: Z coordinate, global: altitude (relative or absolute, depending on frame). (float)

*/
mavlink10.messages.mission_item = function(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) {

    this.format = '<fffffffHHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_ITEM;
    this.order_map = [9, 10, 7, 11, 8, 12, 13, 0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 254;
    this.name = 'MISSION_ITEM';

    this.fieldnames = ['target_system', 'target_component', 'seq', 'frame', 'command', 'current', 'autocontinue', 'param1', 'param2', 'param3', 'param4', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.mission_item.prototype = new mavlink10.message;
mavlink10.messages.mission_item.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param1, this.param2, this.param3, this.param4, this.x, this.y, this.z, this.seq, this.command, this.target_system, this.target_component, this.frame, this.current, this.autocontinue]));
}

/* 
Request the information of the mission item with the sequence number
seq. The response of the system to this message should be a
MISSION_ITEM message. https://mavlink.io/en/protocol/mission.html

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                seq                       : Sequence (uint16_t)

*/
mavlink10.messages.mission_request = function(target_system, target_component, seq) {

    this.format = '<HBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST;
    this.order_map = [1, 2, 0];
    this.crc_extra = 230;
    this.name = 'MISSION_REQUEST';

    this.fieldnames = ['target_system', 'target_component', 'seq'];


    this.set(arguments);

}
        mavlink10.messages.mission_request.prototype = new mavlink10.message;
mavlink10.messages.mission_request.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seq, this.target_system, this.target_component]));
}

/* 
Set the mission item with sequence number seq as current item. This
means that the MAV will continue to this mission item on the shortest
path (not following the mission items in-between).

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                seq                       : Sequence (uint16_t)

*/
mavlink10.messages.mission_set_current = function(target_system, target_component, seq) {

    this.format = '<HBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_SET_CURRENT;
    this.order_map = [1, 2, 0];
    this.crc_extra = 28;
    this.name = 'MISSION_SET_CURRENT';

    this.fieldnames = ['target_system', 'target_component', 'seq'];


    this.set(arguments);

}
        mavlink10.messages.mission_set_current.prototype = new mavlink10.message;
mavlink10.messages.mission_set_current.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seq, this.target_system, this.target_component]));
}

/* 
Message that announces the sequence number of the current active
mission item. The MAV will fly towards this mission item.

                seq                       : Sequence (uint16_t)

*/
mavlink10.messages.mission_current = function(seq) {

    this.format = '<H';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_CURRENT;
    this.order_map = [0];
    this.crc_extra = 28;
    this.name = 'MISSION_CURRENT';

    this.fieldnames = ['seq'];


    this.set(arguments);

}
        mavlink10.messages.mission_current.prototype = new mavlink10.message;
mavlink10.messages.mission_current.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seq]));
}

/* 
Request the overall list of mission items from the system/component.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)

*/
mavlink10.messages.mission_request_list = function(target_system, target_component) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_LIST;
    this.order_map = [0, 1];
    this.crc_extra = 132;
    this.name = 'MISSION_REQUEST_LIST';

    this.fieldnames = ['target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.mission_request_list.prototype = new mavlink10.message;
mavlink10.messages.mission_request_list.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component]));
}

/* 
This message is emitted as response to MISSION_REQUEST_LIST by the MAV
and to initiate a write transaction. The GCS can then request the
individual mission item based on the knowledge of the total number of
waypoints.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                count                     : Number of mission items in the sequence (uint16_t)

*/
mavlink10.messages.mission_count = function(target_system, target_component, count) {

    this.format = '<HBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_COUNT;
    this.order_map = [1, 2, 0];
    this.crc_extra = 221;
    this.name = 'MISSION_COUNT';

    this.fieldnames = ['target_system', 'target_component', 'count'];


    this.set(arguments);

}
        mavlink10.messages.mission_count.prototype = new mavlink10.message;
mavlink10.messages.mission_count.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.count, this.target_system, this.target_component]));
}

/* 
Delete all mission items at once.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)

*/
mavlink10.messages.mission_clear_all = function(target_system, target_component) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_CLEAR_ALL;
    this.order_map = [0, 1];
    this.crc_extra = 232;
    this.name = 'MISSION_CLEAR_ALL';

    this.fieldnames = ['target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.mission_clear_all.prototype = new mavlink10.message;
mavlink10.messages.mission_clear_all.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component]));
}

/* 
A certain mission item has been reached. The system will either hold
this position (or circle on the orbit) or (if the autocontinue on the
WP was set) continue to the next waypoint.

                seq                       : Sequence (uint16_t)

*/
mavlink10.messages.mission_item_reached = function(seq) {

    this.format = '<H';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_ITEM_REACHED;
    this.order_map = [0];
    this.crc_extra = 11;
    this.name = 'MISSION_ITEM_REACHED';

    this.fieldnames = ['seq'];


    this.set(arguments);

}
        mavlink10.messages.mission_item_reached.prototype = new mavlink10.message;
mavlink10.messages.mission_item_reached.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seq]));
}

/* 
Acknowledgment message during waypoint handling. The type field states
if this message is a positive ack (type=0) or if an error happened
(type=non-zero).

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                type                      : Mission result. (uint8_t)

*/
mavlink10.messages.mission_ack = function(target_system, target_component, type) {

    this.format = '<BBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_ACK;
    this.order_map = [0, 1, 2];
    this.crc_extra = 153;
    this.name = 'MISSION_ACK';

    this.fieldnames = ['target_system', 'target_component', 'type'];


    this.set(arguments);

}
        mavlink10.messages.mission_ack.prototype = new mavlink10.message;
mavlink10.messages.mission_ack.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component, this.type]));
}

/* 
As local waypoints exist, the global waypoint reference allows to
transform between the local coordinate frame and the global (GPS)
coordinate frame. This can be necessary when e.g. in- and outdoor
settings are connected and the MAV should move from in- to outdoor.

                target_system             : System ID (uint8_t)
                latitude                  : Latitude (WGS84) (int32_t)
                longitude                 : Longitude (WGS84) (int32_t)
                altitude                  : Altitude (AMSL). Positive for up. (int32_t)

*/
mavlink10.messages.set_gps_global_origin = function(target_system, latitude, longitude, altitude) {

    this.format = '<iiiB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_GPS_GLOBAL_ORIGIN;
    this.order_map = [3, 0, 1, 2];
    this.crc_extra = 41;
    this.name = 'SET_GPS_GLOBAL_ORIGIN';

    this.fieldnames = ['target_system', 'latitude', 'longitude', 'altitude'];


    this.set(arguments);

}
        mavlink10.messages.set_gps_global_origin.prototype = new mavlink10.message;
mavlink10.messages.set_gps_global_origin.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.latitude, this.longitude, this.altitude, this.target_system]));
}

/* 
Once the MAV sets a new GPS-Local correspondence, this message
announces the origin (0,0,0) position

                latitude                  : Latitude (WGS84) (int32_t)
                longitude                 : Longitude (WGS84) (int32_t)
                altitude                  : Altitude (AMSL). Positive for up. (int32_t)

*/
mavlink10.messages.gps_global_origin = function(latitude, longitude, altitude) {

    this.format = '<iii';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
    this.order_map = [0, 1, 2];
    this.crc_extra = 39;
    this.name = 'GPS_GLOBAL_ORIGIN';

    this.fieldnames = ['latitude', 'longitude', 'altitude'];


    this.set(arguments);

}
        mavlink10.messages.gps_global_origin.prototype = new mavlink10.message;
mavlink10.messages.gps_global_origin.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.latitude, this.longitude, this.altitude]));
}

/* 
Bind a RC channel to a parameter. The parameter should change
according to the RC channel value.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                param_id                  : Onboard parameter id, terminated by NULL if the length is less than 16 human-readable chars and WITHOUT null termination (NULL) byte if the length is exactly 16 chars - applications have to provide 16+1 bytes storage if the ID is stored as string (char)
                param_index               : Parameter index. Send -1 to use the param ID field as identifier (else the param id will be ignored), send -2 to disable any existing map for this rc_channel_index. (int16_t)
                parameter_rc_channel_index        : Index of parameter RC channel. Not equal to the RC channel id. Typically corresponds to a potentiometer-knob on the RC. (uint8_t)
                param_value0              : Initial parameter value (float)
                scale                     : Scale, maps the RC range [-1, 1] to a parameter value (float)
                param_value_min           : Minimum param value. The protocol does not define if this overwrites an onboard minimum value. (Depends on implementation) (float)
                param_value_max           : Maximum param value. The protocol does not define if this overwrites an onboard maximum value. (Depends on implementation) (float)

*/
mavlink10.messages.param_map_rc = function(target_system, target_component, param_id, param_index, parameter_rc_channel_index, param_value0, scale, param_value_min, param_value_max) {

    this.format = '<ffffhBB16sB';
    this.id = mavlink10.MAVLINK_MSG_ID_PARAM_MAP_RC;
    this.order_map = [5, 6, 7, 4, 8, 0, 1, 2, 3];
    this.crc_extra = 78;
    this.name = 'PARAM_MAP_RC';

    this.fieldnames = ['target_system', 'target_component', 'param_id', 'param_index', 'parameter_rc_channel_index', 'param_value0', 'scale', 'param_value_min', 'param_value_max'];


    this.set(arguments);

}
        mavlink10.messages.param_map_rc.prototype = new mavlink10.message;
mavlink10.messages.param_map_rc.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param_value0, this.scale, this.param_value_min, this.param_value_max, this.param_index, this.target_system, this.target_component, this.param_id, this.parameter_rc_channel_index]));
}

/* 
Request the information of the mission item with the sequence number
seq. The response of the system to this message should be a
MISSION_ITEM_INT message. https://mavlink.io/en/protocol/mission.html

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                seq                       : Sequence (uint16_t)

*/
mavlink10.messages.mission_request_int = function(target_system, target_component, seq) {

    this.format = '<HBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_REQUEST_INT;
    this.order_map = [1, 2, 0];
    this.crc_extra = 196;
    this.name = 'MISSION_REQUEST_INT';

    this.fieldnames = ['target_system', 'target_component', 'seq'];


    this.set(arguments);

}
        mavlink10.messages.mission_request_int.prototype = new mavlink10.message;
mavlink10.messages.mission_request_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seq, this.target_system, this.target_component]));
}

/* 
Set a safety zone (volume), which is defined by two corners of a cube.
This message can be used to tell the MAV which setpoints/waypoints to
accept and which to reject. Safety areas are often enforced by
national or competition regulations.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                frame                     : Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t)
                p1x                       : x position 1 / Latitude 1 (float)
                p1y                       : y position 1 / Longitude 1 (float)
                p1z                       : z position 1 / Altitude 1 (float)
                p2x                       : x position 2 / Latitude 2 (float)
                p2y                       : y position 2 / Longitude 2 (float)
                p2z                       : z position 2 / Altitude 2 (float)

*/
mavlink10.messages.safety_set_allowed_area = function(target_system, target_component, frame, p1x, p1y, p1z, p2x, p2y, p2z) {

    this.format = '<ffffffBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SAFETY_SET_ALLOWED_AREA;
    this.order_map = [6, 7, 8, 0, 1, 2, 3, 4, 5];
    this.crc_extra = 15;
    this.name = 'SAFETY_SET_ALLOWED_AREA';

    this.fieldnames = ['target_system', 'target_component', 'frame', 'p1x', 'p1y', 'p1z', 'p2x', 'p2y', 'p2z'];


    this.set(arguments);

}
        mavlink10.messages.safety_set_allowed_area.prototype = new mavlink10.message;
mavlink10.messages.safety_set_allowed_area.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.p1x, this.p1y, this.p1z, this.p2x, this.p2y, this.p2z, this.target_system, this.target_component, this.frame]));
}

/* 
Read out the safety zone the MAV currently assumes.

                frame                     : Coordinate frame. Can be either global, GPS, right-handed with Z axis up or local, right handed, Z axis down. (uint8_t)
                p1x                       : x position 1 / Latitude 1 (float)
                p1y                       : y position 1 / Longitude 1 (float)
                p1z                       : z position 1 / Altitude 1 (float)
                p2x                       : x position 2 / Latitude 2 (float)
                p2y                       : y position 2 / Longitude 2 (float)
                p2z                       : z position 2 / Altitude 2 (float)

*/
mavlink10.messages.safety_allowed_area = function(frame, p1x, p1y, p1z, p2x, p2y, p2z) {

    this.format = '<ffffffB';
    this.id = mavlink10.MAVLINK_MSG_ID_SAFETY_ALLOWED_AREA;
    this.order_map = [6, 0, 1, 2, 3, 4, 5];
    this.crc_extra = 3;
    this.name = 'SAFETY_ALLOWED_AREA';

    this.fieldnames = ['frame', 'p1x', 'p1y', 'p1z', 'p2x', 'p2y', 'p2z'];


    this.set(arguments);

}
        mavlink10.messages.safety_allowed_area.prototype = new mavlink10.message;
mavlink10.messages.safety_allowed_area.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.p1x, this.p1y, this.p1z, this.p2x, this.p2y, this.p2z, this.frame]));
}

/* 
The attitude in the aeronautical frame (right-handed, Z-down, X-front,
Y-right), expressed as quaternion. Quaternion order is w, x, y, z and
a zero rotation would be expressed as (1 0 0 0).

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                q                         : Quaternion components, w, x, y, z (1 0 0 0 is the null-rotation) (float)
                rollspeed                 : Roll angular speed (float)
                pitchspeed                : Pitch angular speed (float)
                yawspeed                  : Yaw angular speed (float)
                covariance                : Attitude covariance (float)

*/
mavlink10.messages.attitude_quaternion_cov = function(time_usec, q, rollspeed, pitchspeed, yawspeed, covariance) {

    this.format = '<Q4ffff9f';
    this.id = mavlink10.MAVLINK_MSG_ID_ATTITUDE_QUATERNION_COV;
    this.order_map = [0, 1, 2, 3, 4, 5];
    this.crc_extra = 167;
    this.name = 'ATTITUDE_QUATERNION_COV';

    this.fieldnames = ['time_usec', 'q', 'rollspeed', 'pitchspeed', 'yawspeed', 'covariance'];


    this.set(arguments);

}
        mavlink10.messages.attitude_quaternion_cov.prototype = new mavlink10.message;
mavlink10.messages.attitude_quaternion_cov.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.q, this.rollspeed, this.pitchspeed, this.yawspeed, this.covariance]));
}

/* 
The state of the fixed wing navigation and position controller.

                nav_roll                  : Current desired roll (float)
                nav_pitch                 : Current desired pitch (float)
                nav_bearing               : Current desired heading (int16_t)
                target_bearing            : Bearing to current waypoint/target (int16_t)
                wp_dist                   : Distance to active waypoint (uint16_t)
                alt_error                 : Current altitude error (float)
                aspd_error                : Current airspeed error (float)
                xtrack_error              : Current crosstrack error on x-y plane (float)

*/
mavlink10.messages.nav_controller_output = function(nav_roll, nav_pitch, nav_bearing, target_bearing, wp_dist, alt_error, aspd_error, xtrack_error) {

    this.format = '<fffffhhH';
    this.id = mavlink10.MAVLINK_MSG_ID_NAV_CONTROLLER_OUTPUT;
    this.order_map = [0, 1, 5, 6, 7, 2, 3, 4];
    this.crc_extra = 183;
    this.name = 'NAV_CONTROLLER_OUTPUT';

    this.fieldnames = ['nav_roll', 'nav_pitch', 'nav_bearing', 'target_bearing', 'wp_dist', 'alt_error', 'aspd_error', 'xtrack_error'];


    this.set(arguments);

}
        mavlink10.messages.nav_controller_output.prototype = new mavlink10.message;
mavlink10.messages.nav_controller_output.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.nav_roll, this.nav_pitch, this.alt_error, this.aspd_error, this.xtrack_error, this.nav_bearing, this.target_bearing, this.wp_dist]));
}

/* 
The filtered global position (e.g. fused GPS and accelerometers). The
position is in GPS-frame (right-handed, Z-up). It  is designed as
scaled integer message since the resolution of float is not
sufficient. NOTE: This message is intended for onboard networks /
companion computers and higher-bandwidth links and optimized for
accuracy and completeness. Please use the GLOBAL_POSITION_INT message
for a minimal subset.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                estimator_type            : Class id of the estimator this estimate originated from. (uint8_t)
                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)
                alt                       : Altitude in meters above MSL (int32_t)
                relative_alt              : Altitude above ground (int32_t)
                vx                        : Ground X Speed (Latitude) (float)
                vy                        : Ground Y Speed (Longitude) (float)
                vz                        : Ground Z Speed (Altitude) (float)
                covariance                : Covariance matrix (first six entries are the first ROW, next six entries are the second row, etc.) (float)

*/
mavlink10.messages.global_position_int_cov = function(time_usec, estimator_type, lat, lon, alt, relative_alt, vx, vy, vz, covariance) {

    this.format = '<Qiiiifff36fB';
    this.id = mavlink10.MAVLINK_MSG_ID_GLOBAL_POSITION_INT_COV;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 119;
    this.name = 'GLOBAL_POSITION_INT_COV';

    this.fieldnames = ['time_usec', 'estimator_type', 'lat', 'lon', 'alt', 'relative_alt', 'vx', 'vy', 'vz', 'covariance'];


    this.set(arguments);

}
        mavlink10.messages.global_position_int_cov.prototype = new mavlink10.message;
mavlink10.messages.global_position_int_cov.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.lat, this.lon, this.alt, this.relative_alt, this.vx, this.vy, this.vz, this.covariance, this.estimator_type]));
}

/* 
The filtered local position (e.g. fused computer vision and
accelerometers). Coordinate frame is right-handed, Z-axis down
(aeronautical frame, NED / north-east-down convention)

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                estimator_type            : Class id of the estimator this estimate originated from. (uint8_t)
                x                         : X Position (float)
                y                         : Y Position (float)
                z                         : Z Position (float)
                vx                        : X Speed (float)
                vy                        : Y Speed (float)
                vz                        : Z Speed (float)
                ax                        : X Acceleration (float)
                ay                        : Y Acceleration (float)
                az                        : Z Acceleration (float)
                covariance                : Covariance matrix upper right triangular (first nine entries are the first ROW, next eight entries are the second row, etc.) (float)

*/
mavlink10.messages.local_position_ned_cov = function(time_usec, estimator_type, x, y, z, vx, vy, vz, ax, ay, az, covariance) {

    this.format = '<Qfffffffff45fB';
    this.id = mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED_COV;
    this.order_map = [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 191;
    this.name = 'LOCAL_POSITION_NED_COV';

    this.fieldnames = ['time_usec', 'estimator_type', 'x', 'y', 'z', 'vx', 'vy', 'vz', 'ax', 'ay', 'az', 'covariance'];


    this.set(arguments);

}
        mavlink10.messages.local_position_ned_cov.prototype = new mavlink10.message;
mavlink10.messages.local_position_ned_cov.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.x, this.y, this.z, this.vx, this.vy, this.vz, this.ax, this.ay, this.az, this.covariance, this.estimator_type]));
}

/* 
The PPM values of the RC channels received. The standard PPM
modulation is as follows: 1000 microseconds: 0%, 2000 microseconds:
100%.  A value of UINT16_MAX implies the channel is unused. Individual
receivers/transmitters might violate this specification.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                chancount                 : Total number of RC channels being received. This can be larger than 18, indicating that more channels are available but not given in this message. This value should be 0 when no RC channels are available. (uint8_t)
                chan1_raw                 : RC channel 1 value. (uint16_t)
                chan2_raw                 : RC channel 2 value. (uint16_t)
                chan3_raw                 : RC channel 3 value. (uint16_t)
                chan4_raw                 : RC channel 4 value. (uint16_t)
                chan5_raw                 : RC channel 5 value. (uint16_t)
                chan6_raw                 : RC channel 6 value. (uint16_t)
                chan7_raw                 : RC channel 7 value. (uint16_t)
                chan8_raw                 : RC channel 8 value. (uint16_t)
                chan9_raw                 : RC channel 9 value. (uint16_t)
                chan10_raw                : RC channel 10 value. (uint16_t)
                chan11_raw                : RC channel 11 value. (uint16_t)
                chan12_raw                : RC channel 12 value. (uint16_t)
                chan13_raw                : RC channel 13 value. (uint16_t)
                chan14_raw                : RC channel 14 value. (uint16_t)
                chan15_raw                : RC channel 15 value. (uint16_t)
                chan16_raw                : RC channel 16 value. (uint16_t)
                chan17_raw                : RC channel 17 value. (uint16_t)
                chan18_raw                : RC channel 18 value. (uint16_t)
                rssi                      : Receive signal strength indicator. Values: [0-100], 255: invalid/unknown. (uint8_t)

*/
mavlink10.messages.rc_channels = function(time_boot_ms, chancount, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, chan13_raw, chan14_raw, chan15_raw, chan16_raw, chan17_raw, chan18_raw, rssi) {

    this.format = '<IHHHHHHHHHHHHHHHHHHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_RC_CHANNELS;
    this.order_map = [0, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20];
    this.crc_extra = 118;
    this.name = 'RC_CHANNELS';

    this.fieldnames = ['time_boot_ms', 'chancount', 'chan1_raw', 'chan2_raw', 'chan3_raw', 'chan4_raw', 'chan5_raw', 'chan6_raw', 'chan7_raw', 'chan8_raw', 'chan9_raw', 'chan10_raw', 'chan11_raw', 'chan12_raw', 'chan13_raw', 'chan14_raw', 'chan15_raw', 'chan16_raw', 'chan17_raw', 'chan18_raw', 'rssi'];


    this.set(arguments);

}
        mavlink10.messages.rc_channels.prototype = new mavlink10.message;
mavlink10.messages.rc_channels.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.chan1_raw, this.chan2_raw, this.chan3_raw, this.chan4_raw, this.chan5_raw, this.chan6_raw, this.chan7_raw, this.chan8_raw, this.chan9_raw, this.chan10_raw, this.chan11_raw, this.chan12_raw, this.chan13_raw, this.chan14_raw, this.chan15_raw, this.chan16_raw, this.chan17_raw, this.chan18_raw, this.chancount, this.rssi]));
}

/* 
Request a data stream.

                target_system             : The target requested to send the message stream. (uint8_t)
                target_component          : The target requested to send the message stream. (uint8_t)
                req_stream_id             : The ID of the requested data stream (uint8_t)
                req_message_rate          : The requested message rate (uint16_t)
                start_stop                : 1 to start sending, 0 to stop sending. (uint8_t)

*/
mavlink10.messages.request_data_stream = function(target_system, target_component, req_stream_id, req_message_rate, start_stop) {

    this.format = '<HBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_REQUEST_DATA_STREAM;
    this.order_map = [1, 2, 3, 0, 4];
    this.crc_extra = 148;
    this.name = 'REQUEST_DATA_STREAM';

    this.fieldnames = ['target_system', 'target_component', 'req_stream_id', 'req_message_rate', 'start_stop'];


    this.set(arguments);

}
        mavlink10.messages.request_data_stream.prototype = new mavlink10.message;
mavlink10.messages.request_data_stream.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.req_message_rate, this.target_system, this.target_component, this.req_stream_id, this.start_stop]));
}

/* 
Data stream status information.

                stream_id                 : The ID of the requested data stream (uint8_t)
                message_rate              : The message rate (uint16_t)
                on_off                    : 1 stream is enabled, 0 stream is stopped. (uint8_t)

*/
mavlink10.messages.data_stream = function(stream_id, message_rate, on_off) {

    this.format = '<HBB';
    this.id = mavlink10.MAVLINK_MSG_ID_DATA_STREAM;
    this.order_map = [1, 0, 2];
    this.crc_extra = 21;
    this.name = 'DATA_STREAM';

    this.fieldnames = ['stream_id', 'message_rate', 'on_off'];


    this.set(arguments);

}
        mavlink10.messages.data_stream.prototype = new mavlink10.message;
mavlink10.messages.data_stream.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.message_rate, this.stream_id, this.on_off]));
}

/* 
This message provides an API for manually controlling the vehicle
using standard joystick axes nomenclature, along with a joystick-like
input device. Unused axes can be disabled an buttons are also transmit
as boolean values of their

                target                    : The system to be controlled. (uint8_t)
                x                         : X-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to forward(1000)-backward(-1000) movement on a joystick and the pitch of a vehicle. (int16_t)
                y                         : Y-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to left(-1000)-right(1000) movement on a joystick and the roll of a vehicle. (int16_t)
                z                         : Z-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a separate slider movement with maximum being 1000 and minimum being -1000 on a joystick and the thrust of a vehicle. Positive values are positive thrust, negative values are negative thrust. (int16_t)
                r                         : R-axis, normalized to the range [-1000,1000]. A value of INT16_MAX indicates that this axis is invalid. Generally corresponds to a twisting of the joystick, with counter-clockwise being 1000 and clockwise being -1000, and the yaw of a vehicle. (int16_t)
                buttons                   : A bitfield corresponding to the joystick buttons' current state, 1 for pressed, 0 for released. The lowest bit corresponds to Button 1. (uint16_t)

*/
mavlink10.messages.manual_control = function(target, x, y, z, r, buttons) {

    this.format = '<hhhhHB';
    this.id = mavlink10.MAVLINK_MSG_ID_MANUAL_CONTROL;
    this.order_map = [5, 0, 1, 2, 3, 4];
    this.crc_extra = 243;
    this.name = 'MANUAL_CONTROL';

    this.fieldnames = ['target', 'x', 'y', 'z', 'r', 'buttons'];


    this.set(arguments);

}
        mavlink10.messages.manual_control.prototype = new mavlink10.message;
mavlink10.messages.manual_control.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.x, this.y, this.z, this.r, this.buttons, this.target]));
}

/* 
The RAW values of the RC channels sent to the MAV to override info
received from the RC radio. A value of UINT16_MAX means no change to
that channel. A value of 0 means control of that channel should be
released back to the RC radio. The standard PPM modulation is as
follows: 1000 microseconds: 0%, 2000 microseconds: 100%. Individual
receivers/transmitters might violate this specification.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                chan1_raw                 : RC channel 1 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan2_raw                 : RC channel 2 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan3_raw                 : RC channel 3 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan4_raw                 : RC channel 4 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan5_raw                 : RC channel 5 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan6_raw                 : RC channel 6 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan7_raw                 : RC channel 7 value. A value of UINT16_MAX means to ignore this field. (uint16_t)
                chan8_raw                 : RC channel 8 value. A value of UINT16_MAX means to ignore this field. (uint16_t)

*/
mavlink10.messages.rc_channels_override = function(target_system, target_component, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw) {

    this.format = '<HHHHHHHHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE;
    this.order_map = [8, 9, 0, 1, 2, 3, 4, 5, 6, 7];
    this.crc_extra = 124;
    this.name = 'RC_CHANNELS_OVERRIDE';

    this.fieldnames = ['target_system', 'target_component', 'chan1_raw', 'chan2_raw', 'chan3_raw', 'chan4_raw', 'chan5_raw', 'chan6_raw', 'chan7_raw', 'chan8_raw'];


    this.set(arguments);

}
        mavlink10.messages.rc_channels_override.prototype = new mavlink10.message;
mavlink10.messages.rc_channels_override.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.chan1_raw, this.chan2_raw, this.chan3_raw, this.chan4_raw, this.chan5_raw, this.chan6_raw, this.chan7_raw, this.chan8_raw, this.target_system, this.target_component]));
}

/* 
Message encoding a mission item. This message is emitted to announce
the presence of a mission item and to set a mission item on the
system. The mission item can be either in x, y, z meters (type: LOCAL)
or x:lat, y:lon, z:altitude. Local frame is Z-down, right handed
(NED), global frame is Z-up, right handed (ENU). See also
https://mavlink.io/en/protocol/mission.html.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                seq                       : Waypoint ID (sequence number). Starts at zero. Increases monotonically for each waypoint, no gaps in the sequence (0,1,2,3,4). (uint16_t)
                frame                     : The coordinate system of the waypoint. (uint8_t)
                command                   : The scheduled action for the waypoint. (uint16_t)
                current                   : false:0, true:1 (uint8_t)
                autocontinue              : Autocontinue to next waypoint (uint8_t)
                param1                    : PARAM1, see MAV_CMD enum (float)
                param2                    : PARAM2, see MAV_CMD enum (float)
                param3                    : PARAM3, see MAV_CMD enum (float)
                param4                    : PARAM4, see MAV_CMD enum (float)
                x                         : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t)
                y                         : PARAM6 / y position: local: x position in meters * 1e4, global: longitude in degrees *10^7 (int32_t)
                z                         : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame. (float)

*/
mavlink10.messages.mission_item_int = function(target_system, target_component, seq, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) {

    this.format = '<ffffiifHHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MISSION_ITEM_INT;
    this.order_map = [9, 10, 7, 11, 8, 12, 13, 0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 38;
    this.name = 'MISSION_ITEM_INT';

    this.fieldnames = ['target_system', 'target_component', 'seq', 'frame', 'command', 'current', 'autocontinue', 'param1', 'param2', 'param3', 'param4', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.mission_item_int.prototype = new mavlink10.message;
mavlink10.messages.mission_item_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param1, this.param2, this.param3, this.param4, this.x, this.y, this.z, this.seq, this.command, this.target_system, this.target_component, this.frame, this.current, this.autocontinue]));
}

/* 
Metrics typically displayed on a HUD for fixed wing aircraft

                airspeed                  : Current airspeed (float)
                groundspeed               : Current ground speed (float)
                heading                   : Current heading in degrees, in compass units (0..360, 0=north) (int16_t)
                throttle                  : Current throttle setting in integer percent, 0 to 100 (uint16_t)
                alt                       : Current altitude (MSL) (float)
                climb                     : Current climb rate (float)

*/
mavlink10.messages.vfr_hud = function(airspeed, groundspeed, heading, throttle, alt, climb) {

    this.format = '<ffffhH';
    this.id = mavlink10.MAVLINK_MSG_ID_VFR_HUD;
    this.order_map = [0, 1, 4, 5, 2, 3];
    this.crc_extra = 20;
    this.name = 'VFR_HUD';

    this.fieldnames = ['airspeed', 'groundspeed', 'heading', 'throttle', 'alt', 'climb'];


    this.set(arguments);

}
        mavlink10.messages.vfr_hud.prototype = new mavlink10.message;
mavlink10.messages.vfr_hud.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.airspeed, this.groundspeed, this.alt, this.climb, this.heading, this.throttle]));
}

/* 
Message encoding a command with parameters as scaled integers. Scaling
depends on the actual command value.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                frame                     : The coordinate system of the COMMAND. (uint8_t)
                command                   : The scheduled action for the mission item. (uint16_t)
                current                   : false:0, true:1 (uint8_t)
                autocontinue              : autocontinue to next wp (uint8_t)
                param1                    : PARAM1, see MAV_CMD enum (float)
                param2                    : PARAM2, see MAV_CMD enum (float)
                param3                    : PARAM3, see MAV_CMD enum (float)
                param4                    : PARAM4, see MAV_CMD enum (float)
                x                         : PARAM5 / local: x position in meters * 1e4, global: latitude in degrees * 10^7 (int32_t)
                y                         : PARAM6 / local: y position in meters * 1e4, global: longitude in degrees * 10^7 (int32_t)
                z                         : PARAM7 / z position: global: altitude in meters (relative or absolute, depending on frame). (float)

*/
mavlink10.messages.command_int = function(target_system, target_component, frame, command, current, autocontinue, param1, param2, param3, param4, x, y, z) {

    this.format = '<ffffiifHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_COMMAND_INT;
    this.order_map = [8, 9, 10, 7, 11, 12, 0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 158;
    this.name = 'COMMAND_INT';

    this.fieldnames = ['target_system', 'target_component', 'frame', 'command', 'current', 'autocontinue', 'param1', 'param2', 'param3', 'param4', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.command_int.prototype = new mavlink10.message;
mavlink10.messages.command_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param1, this.param2, this.param3, this.param4, this.x, this.y, this.z, this.command, this.target_system, this.target_component, this.frame, this.current, this.autocontinue]));
}

/* 
Send a command with up to seven parameters to the MAV

                target_system             : System which should execute the command (uint8_t)
                target_component          : Component which should execute the command, 0 for all components (uint8_t)
                command                   : Command ID (of command to send). (uint16_t)
                confirmation              : 0: First transmission of this command. 1-255: Confirmation transmissions (e.g. for kill command) (uint8_t)
                param1                    : Parameter 1 (for the specific command). (float)
                param2                    : Parameter 2 (for the specific command). (float)
                param3                    : Parameter 3 (for the specific command). (float)
                param4                    : Parameter 4 (for the specific command). (float)
                param5                    : Parameter 5 (for the specific command). (float)
                param6                    : Parameter 6 (for the specific command). (float)
                param7                    : Parameter 7 (for the specific command). (float)

*/
mavlink10.messages.command_long = function(target_system, target_component, command, confirmation, param1, param2, param3, param4, param5, param6, param7) {

    this.format = '<fffffffHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_COMMAND_LONG;
    this.order_map = [8, 9, 7, 10, 0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 152;
    this.name = 'COMMAND_LONG';

    this.fieldnames = ['target_system', 'target_component', 'command', 'confirmation', 'param1', 'param2', 'param3', 'param4', 'param5', 'param6', 'param7'];


    this.set(arguments);

}
        mavlink10.messages.command_long.prototype = new mavlink10.message;
mavlink10.messages.command_long.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.param1, this.param2, this.param3, this.param4, this.param5, this.param6, this.param7, this.command, this.target_system, this.target_component, this.confirmation]));
}

/* 
Report status of a command. Includes feedback whether the command was
executed.

                command                   : Command ID (of acknowledged command). (uint16_t)
                result                    : Result of command. (uint8_t)

*/
mavlink10.messages.command_ack = function(command, result) {

    this.format = '<HB';
    this.id = mavlink10.MAVLINK_MSG_ID_COMMAND_ACK;
    this.order_map = [0, 1];
    this.crc_extra = 143;
    this.name = 'COMMAND_ACK';

    this.fieldnames = ['command', 'result'];


    this.set(arguments);

}
        mavlink10.messages.command_ack.prototype = new mavlink10.message;
mavlink10.messages.command_ack.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.command, this.result]));
}

/* 
Setpoint in roll, pitch, yaw and thrust from the operator

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                roll                      : Desired roll rate (float)
                pitch                     : Desired pitch rate (float)
                yaw                       : Desired yaw rate (float)
                thrust                    : Collective thrust, normalized to 0 .. 1 (float)
                mode_switch               : Flight mode switch position, 0.. 255 (uint8_t)
                manual_override_switch        : Override mode switch position, 0.. 255 (uint8_t)

*/
mavlink10.messages.manual_setpoint = function(time_boot_ms, roll, pitch, yaw, thrust, mode_switch, manual_override_switch) {

    this.format = '<IffffBB';
    this.id = mavlink10.MAVLINK_MSG_ID_MANUAL_SETPOINT;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 106;
    this.name = 'MANUAL_SETPOINT';

    this.fieldnames = ['time_boot_ms', 'roll', 'pitch', 'yaw', 'thrust', 'mode_switch', 'manual_override_switch'];


    this.set(arguments);

}
        mavlink10.messages.manual_setpoint.prototype = new mavlink10.message;
mavlink10.messages.manual_setpoint.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.roll, this.pitch, this.yaw, this.thrust, this.mode_switch, this.manual_override_switch]));
}

/* 
Sets a desired vehicle attitude. Used by an external controller to
command the vehicle (manual controller or other system).

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                type_mask                 : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 6: reserved, bit 7: throttle, bit 8: attitude (uint8_t)
                q                         : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float)
                body_roll_rate            : Body roll rate (float)
                body_pitch_rate           : Body pitch rate (float)
                body_yaw_rate             : Body yaw rate (float)
                thrust                    : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float)

*/
mavlink10.messages.set_attitude_target = function(time_boot_ms, target_system, target_component, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) {

    this.format = '<I4fffffBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_ATTITUDE_TARGET;
    this.order_map = [0, 6, 7, 8, 1, 2, 3, 4, 5];
    this.crc_extra = 49;
    this.name = 'SET_ATTITUDE_TARGET';

    this.fieldnames = ['time_boot_ms', 'target_system', 'target_component', 'type_mask', 'q', 'body_roll_rate', 'body_pitch_rate', 'body_yaw_rate', 'thrust'];


    this.set(arguments);

}
        mavlink10.messages.set_attitude_target.prototype = new mavlink10.message;
mavlink10.messages.set_attitude_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.q, this.body_roll_rate, this.body_pitch_rate, this.body_yaw_rate, this.thrust, this.target_system, this.target_component, this.type_mask]));
}

/* 
Reports the current commanded attitude of the vehicle as specified by
the autopilot. This should match the commands sent in a
SET_ATTITUDE_TARGET message if the vehicle is being controlled this
way.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                type_mask                 : Mappings: If any of these bits are set, the corresponding input should be ignored: bit 1: body roll rate, bit 2: body pitch rate, bit 3: body yaw rate. bit 4-bit 7: reserved, bit 8: attitude (uint8_t)
                q                         : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float)
                body_roll_rate            : Body roll rate (float)
                body_pitch_rate           : Body pitch rate (float)
                body_yaw_rate             : Body yaw rate (float)
                thrust                    : Collective thrust, normalized to 0 .. 1 (-1 .. 1 for vehicles capable of reverse trust) (float)

*/
mavlink10.messages.attitude_target = function(time_boot_ms, type_mask, q, body_roll_rate, body_pitch_rate, body_yaw_rate, thrust) {

    this.format = '<I4fffffB';
    this.id = mavlink10.MAVLINK_MSG_ID_ATTITUDE_TARGET;
    this.order_map = [0, 6, 1, 2, 3, 4, 5];
    this.crc_extra = 22;
    this.name = 'ATTITUDE_TARGET';

    this.fieldnames = ['time_boot_ms', 'type_mask', 'q', 'body_roll_rate', 'body_pitch_rate', 'body_yaw_rate', 'thrust'];


    this.set(arguments);

}
        mavlink10.messages.attitude_target.prototype = new mavlink10.message;
mavlink10.messages.attitude_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.q, this.body_roll_rate, this.body_pitch_rate, this.body_yaw_rate, this.thrust, this.type_mask]));
}

/* 
Sets a desired vehicle position in a local north-east-down coordinate
frame. Used by an external controller to command the vehicle (manual
controller or other system).

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                coordinate_frame          : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t)
                type_mask                 : Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t)
                x                         : X Position in NED frame (float)
                y                         : Y Position in NED frame (float)
                z                         : Z Position in NED frame (note, altitude is negative in NED) (float)
                vx                        : X velocity in NED frame (float)
                vy                        : Y velocity in NED frame (float)
                vz                        : Z velocity in NED frame (float)
                afx                       : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afy                       : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afz                       : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                yaw                       : yaw setpoint (float)
                yaw_rate                  : yaw rate setpoint (float)

*/
mavlink10.messages.set_position_target_local_ned = function(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) {

    this.format = '<IfffffffffffHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_POSITION_TARGET_LOCAL_NED;
    this.order_map = [0, 13, 14, 15, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
    this.crc_extra = 143;
    this.name = 'SET_POSITION_TARGET_LOCAL_NED';

    this.fieldnames = ['time_boot_ms', 'target_system', 'target_component', 'coordinate_frame', 'type_mask', 'x', 'y', 'z', 'vx', 'vy', 'vz', 'afx', 'afy', 'afz', 'yaw', 'yaw_rate'];


    this.set(arguments);

}
        mavlink10.messages.set_position_target_local_ned.prototype = new mavlink10.message;
mavlink10.messages.set_position_target_local_ned.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.x, this.y, this.z, this.vx, this.vy, this.vz, this.afx, this.afy, this.afz, this.yaw, this.yaw_rate, this.type_mask, this.target_system, this.target_component, this.coordinate_frame]));
}

/* 
Reports the current commanded vehicle position, velocity, and
acceleration as specified by the autopilot. This should match the
commands sent in SET_POSITION_TARGET_LOCAL_NED if the vehicle is being
controlled this way.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                coordinate_frame          : Valid options are: MAV_FRAME_LOCAL_NED = 1, MAV_FRAME_LOCAL_OFFSET_NED = 7, MAV_FRAME_BODY_NED = 8, MAV_FRAME_BODY_OFFSET_NED = 9 (uint8_t)
                type_mask                 : Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t)
                x                         : X Position in NED frame (float)
                y                         : Y Position in NED frame (float)
                z                         : Z Position in NED frame (note, altitude is negative in NED) (float)
                vx                        : X velocity in NED frame (float)
                vy                        : Y velocity in NED frame (float)
                vz                        : Z velocity in NED frame (float)
                afx                       : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afy                       : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afz                       : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                yaw                       : yaw setpoint (float)
                yaw_rate                  : yaw rate setpoint (float)

*/
mavlink10.messages.position_target_local_ned = function(time_boot_ms, coordinate_frame, type_mask, x, y, z, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) {

    this.format = '<IfffffffffffHB';
    this.id = mavlink10.MAVLINK_MSG_ID_POSITION_TARGET_LOCAL_NED;
    this.order_map = [0, 13, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
    this.crc_extra = 140;
    this.name = 'POSITION_TARGET_LOCAL_NED';

    this.fieldnames = ['time_boot_ms', 'coordinate_frame', 'type_mask', 'x', 'y', 'z', 'vx', 'vy', 'vz', 'afx', 'afy', 'afz', 'yaw', 'yaw_rate'];


    this.set(arguments);

}
        mavlink10.messages.position_target_local_ned.prototype = new mavlink10.message;
mavlink10.messages.position_target_local_ned.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.x, this.y, this.z, this.vx, this.vy, this.vz, this.afx, this.afy, this.afz, this.yaw, this.yaw_rate, this.type_mask, this.coordinate_frame]));
}

/* 
Sets a desired vehicle position, velocity, and/or acceleration in a
global coordinate system (WGS84). Used by an external controller to
command the vehicle (manual controller or other system).

                time_boot_ms              : Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t)
                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                coordinate_frame          : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t)
                type_mask                 : Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t)
                lat_int                   : X Position in WGS84 frame (int32_t)
                lon_int                   : Y Position in WGS84 frame (int32_t)
                alt                       : Altitude (AMSL) if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float)
                vx                        : X velocity in NED frame (float)
                vy                        : Y velocity in NED frame (float)
                vz                        : Z velocity in NED frame (float)
                afx                       : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afy                       : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afz                       : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                yaw                       : yaw setpoint (float)
                yaw_rate                  : yaw rate setpoint (float)

*/
mavlink10.messages.set_position_target_global_int = function(time_boot_ms, target_system, target_component, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) {

    this.format = '<IiifffffffffHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_POSITION_TARGET_GLOBAL_INT;
    this.order_map = [0, 13, 14, 15, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
    this.crc_extra = 5;
    this.name = 'SET_POSITION_TARGET_GLOBAL_INT';

    this.fieldnames = ['time_boot_ms', 'target_system', 'target_component', 'coordinate_frame', 'type_mask', 'lat_int', 'lon_int', 'alt', 'vx', 'vy', 'vz', 'afx', 'afy', 'afz', 'yaw', 'yaw_rate'];


    this.set(arguments);

}
        mavlink10.messages.set_position_target_global_int.prototype = new mavlink10.message;
mavlink10.messages.set_position_target_global_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.lat_int, this.lon_int, this.alt, this.vx, this.vy, this.vz, this.afx, this.afy, this.afz, this.yaw, this.yaw_rate, this.type_mask, this.target_system, this.target_component, this.coordinate_frame]));
}

/* 
Reports the current commanded vehicle position, velocity, and
acceleration as specified by the autopilot. This should match the
commands sent in SET_POSITION_TARGET_GLOBAL_INT if the vehicle is
being controlled this way.

                time_boot_ms              : Timestamp (time since system boot). The rationale for the timestamp in the setpoint is to allow the system to compensate for the transport delay of the setpoint. This allows the system to compensate processing latency. (uint32_t)
                coordinate_frame          : Valid options are: MAV_FRAME_GLOBAL_INT = 5, MAV_FRAME_GLOBAL_RELATIVE_ALT_INT = 6, MAV_FRAME_GLOBAL_TERRAIN_ALT_INT = 11 (uint8_t)
                type_mask                 : Bitmap to indicate which dimensions should be ignored by the vehicle: a value of 0b0000000000000000 or 0b0000001000000000 indicates that none of the setpoint dimensions should be ignored. If bit 10 is set the floats afx afy afz should be interpreted as force instead of acceleration. Mapping: bit 1: x, bit 2: y, bit 3: z, bit 4: vx, bit 5: vy, bit 6: vz, bit 7: ax, bit 8: ay, bit 9: az, bit 10: is force setpoint, bit 11: yaw, bit 12: yaw rate (uint16_t)
                lat_int                   : X Position in WGS84 frame (int32_t)
                lon_int                   : Y Position in WGS84 frame (int32_t)
                alt                       : Altitude (AMSL) if absolute or relative, above terrain if GLOBAL_TERRAIN_ALT_INT (float)
                vx                        : X velocity in NED frame (float)
                vy                        : Y velocity in NED frame (float)
                vz                        : Z velocity in NED frame (float)
                afx                       : X acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afy                       : Y acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                afz                       : Z acceleration or force (if bit 10 of type_mask is set) in NED frame in meter / s^2 or N (float)
                yaw                       : yaw setpoint (float)
                yaw_rate                  : yaw rate setpoint (float)

*/
mavlink10.messages.position_target_global_int = function(time_boot_ms, coordinate_frame, type_mask, lat_int, lon_int, alt, vx, vy, vz, afx, afy, afz, yaw, yaw_rate) {

    this.format = '<IiifffffffffHB';
    this.id = mavlink10.MAVLINK_MSG_ID_POSITION_TARGET_GLOBAL_INT;
    this.order_map = [0, 13, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
    this.crc_extra = 150;
    this.name = 'POSITION_TARGET_GLOBAL_INT';

    this.fieldnames = ['time_boot_ms', 'coordinate_frame', 'type_mask', 'lat_int', 'lon_int', 'alt', 'vx', 'vy', 'vz', 'afx', 'afy', 'afz', 'yaw', 'yaw_rate'];


    this.set(arguments);

}
        mavlink10.messages.position_target_global_int.prototype = new mavlink10.message;
mavlink10.messages.position_target_global_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.lat_int, this.lon_int, this.alt, this.vx, this.vy, this.vz, this.afx, this.afy, this.afz, this.yaw, this.yaw_rate, this.type_mask, this.coordinate_frame]));
}

/* 
The offset in X, Y, Z and yaw between the LOCAL_POSITION_NED messages
of MAV X and the global coordinate frame in NED coordinates.
Coordinate frame is right-handed, Z-axis down (aeronautical frame, NED
/ north-east-down convention)

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                x                         : X Position (float)
                y                         : Y Position (float)
                z                         : Z Position (float)
                roll                      : Roll (float)
                pitch                     : Pitch (float)
                yaw                       : Yaw (float)

*/
mavlink10.messages.local_position_ned_system_global_offset = function(time_boot_ms, x, y, z, roll, pitch, yaw) {

    this.format = '<Iffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 231;
    this.name = 'LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET';

    this.fieldnames = ['time_boot_ms', 'x', 'y', 'z', 'roll', 'pitch', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.local_position_ned_system_global_offset.prototype = new mavlink10.message;
mavlink10.messages.local_position_ned_system_global_offset.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.x, this.y, this.z, this.roll, this.pitch, this.yaw]));
}

/* 
Sent from simulation to autopilot. This packet is useful for high
throughput applications such as hardware in the loop simulations.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                roll                      : Roll angle (float)
                pitch                     : Pitch angle (float)
                yaw                       : Yaw angle (float)
                rollspeed                 : Body frame roll / phi angular speed (float)
                pitchspeed                : Body frame pitch / theta angular speed (float)
                yawspeed                  : Body frame yaw / psi angular speed (float)
                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)
                alt                       : Altitude (int32_t)
                vx                        : Ground X Speed (Latitude) (int16_t)
                vy                        : Ground Y Speed (Longitude) (int16_t)
                vz                        : Ground Z Speed (Altitude) (int16_t)
                xacc                      : X acceleration (int16_t)
                yacc                      : Y acceleration (int16_t)
                zacc                      : Z acceleration (int16_t)

*/
mavlink10.messages.hil_state = function(time_usec, roll, pitch, yaw, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, xacc, yacc, zacc) {

    this.format = '<Qffffffiiihhhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_STATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
    this.crc_extra = 183;
    this.name = 'HIL_STATE';

    this.fieldnames = ['time_usec', 'roll', 'pitch', 'yaw', 'rollspeed', 'pitchspeed', 'yawspeed', 'lat', 'lon', 'alt', 'vx', 'vy', 'vz', 'xacc', 'yacc', 'zacc'];


    this.set(arguments);

}
        mavlink10.messages.hil_state.prototype = new mavlink10.message;
mavlink10.messages.hil_state.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.roll, this.pitch, this.yaw, this.rollspeed, this.pitchspeed, this.yawspeed, this.lat, this.lon, this.alt, this.vx, this.vy, this.vz, this.xacc, this.yacc, this.zacc]));
}

/* 
Sent from autopilot to simulation. Hardware in the loop control
outputs

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                roll_ailerons             : Control output -1 .. 1 (float)
                pitch_elevator            : Control output -1 .. 1 (float)
                yaw_rudder                : Control output -1 .. 1 (float)
                throttle                  : Throttle 0 .. 1 (float)
                aux1                      : Aux 1, -1 .. 1 (float)
                aux2                      : Aux 2, -1 .. 1 (float)
                aux3                      : Aux 3, -1 .. 1 (float)
                aux4                      : Aux 4, -1 .. 1 (float)
                mode                      : System mode. (uint8_t)
                nav_mode                  : Navigation mode (MAV_NAV_MODE) (uint8_t)

*/
mavlink10.messages.hil_controls = function(time_usec, roll_ailerons, pitch_elevator, yaw_rudder, throttle, aux1, aux2, aux3, aux4, mode, nav_mode) {

    this.format = '<QffffffffBB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_CONTROLS;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    this.crc_extra = 63;
    this.name = 'HIL_CONTROLS';

    this.fieldnames = ['time_usec', 'roll_ailerons', 'pitch_elevator', 'yaw_rudder', 'throttle', 'aux1', 'aux2', 'aux3', 'aux4', 'mode', 'nav_mode'];


    this.set(arguments);

}
        mavlink10.messages.hil_controls.prototype = new mavlink10.message;
mavlink10.messages.hil_controls.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.roll_ailerons, this.pitch_elevator, this.yaw_rudder, this.throttle, this.aux1, this.aux2, this.aux3, this.aux4, this.mode, this.nav_mode]));
}

/* 
Sent from simulation to autopilot. The RAW values of the RC channels
received. The standard PPM modulation is as follows: 1000
microseconds: 0%, 2000 microseconds: 100%. Individual
receivers/transmitters might violate this specification.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                chan1_raw                 : RC channel 1 value (uint16_t)
                chan2_raw                 : RC channel 2 value (uint16_t)
                chan3_raw                 : RC channel 3 value (uint16_t)
                chan4_raw                 : RC channel 4 value (uint16_t)
                chan5_raw                 : RC channel 5 value (uint16_t)
                chan6_raw                 : RC channel 6 value (uint16_t)
                chan7_raw                 : RC channel 7 value (uint16_t)
                chan8_raw                 : RC channel 8 value (uint16_t)
                chan9_raw                 : RC channel 9 value (uint16_t)
                chan10_raw                : RC channel 10 value (uint16_t)
                chan11_raw                : RC channel 11 value (uint16_t)
                chan12_raw                : RC channel 12 value (uint16_t)
                rssi                      : Receive signal strength indicator. Values: [0-100], 255: invalid/unknown. (uint8_t)

*/
mavlink10.messages.hil_rc_inputs_raw = function(time_usec, chan1_raw, chan2_raw, chan3_raw, chan4_raw, chan5_raw, chan6_raw, chan7_raw, chan8_raw, chan9_raw, chan10_raw, chan11_raw, chan12_raw, rssi) {

    this.format = '<QHHHHHHHHHHHHB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_RC_INPUTS_RAW;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];
    this.crc_extra = 54;
    this.name = 'HIL_RC_INPUTS_RAW';

    this.fieldnames = ['time_usec', 'chan1_raw', 'chan2_raw', 'chan3_raw', 'chan4_raw', 'chan5_raw', 'chan6_raw', 'chan7_raw', 'chan8_raw', 'chan9_raw', 'chan10_raw', 'chan11_raw', 'chan12_raw', 'rssi'];


    this.set(arguments);

}
        mavlink10.messages.hil_rc_inputs_raw.prototype = new mavlink10.message;
mavlink10.messages.hil_rc_inputs_raw.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.chan1_raw, this.chan2_raw, this.chan3_raw, this.chan4_raw, this.chan5_raw, this.chan6_raw, this.chan7_raw, this.chan8_raw, this.chan9_raw, this.chan10_raw, this.chan11_raw, this.chan12_raw, this.rssi]));
}

/* 
Sent from autopilot to simulation. Hardware in the loop control
outputs (replacement for HIL_CONTROLS)

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                controls                  : Control outputs -1 .. 1. Channel assignment depends on the simulated hardware. (float)
                mode                      : System mode. Includes arming state. (uint8_t)
                flags                     : Flags as bitfield, reserved for future use. (uint64_t)

*/
mavlink10.messages.hil_actuator_controls = function(time_usec, controls, mode, flags) {

    this.format = '<QQ16fB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_ACTUATOR_CONTROLS;
    this.order_map = [0, 2, 3, 1];
    this.crc_extra = 47;
    this.name = 'HIL_ACTUATOR_CONTROLS';

    this.fieldnames = ['time_usec', 'controls', 'mode', 'flags'];


    this.set(arguments);

}
        mavlink10.messages.hil_actuator_controls.prototype = new mavlink10.message;
mavlink10.messages.hil_actuator_controls.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.flags, this.controls, this.mode]));
}

/* 
Optical flow from a flow sensor (e.g. optical mouse sensor)

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                sensor_id                 : Sensor ID (uint8_t)
                flow_x                    : Flow in x-sensor direction (int16_t)
                flow_y                    : Flow in y-sensor direction (int16_t)
                flow_comp_m_x             : Flow in x-sensor direction, angular-speed compensated (float)
                flow_comp_m_y             : Flow in y-sensor direction, angular-speed compensated (float)
                quality                   : Optical flow quality / confidence. 0: bad, 255: maximum quality (uint8_t)
                ground_distance           : Ground distance. Positive value: distance known. Negative value: Unknown distance (float)

*/
mavlink10.messages.optical_flow = function(time_usec, sensor_id, flow_x, flow_y, flow_comp_m_x, flow_comp_m_y, quality, ground_distance) {

    this.format = '<QfffhhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_OPTICAL_FLOW;
    this.order_map = [0, 6, 4, 5, 1, 2, 7, 3];
    this.crc_extra = 175;
    this.name = 'OPTICAL_FLOW';

    this.fieldnames = ['time_usec', 'sensor_id', 'flow_x', 'flow_y', 'flow_comp_m_x', 'flow_comp_m_y', 'quality', 'ground_distance'];


    this.set(arguments);

}
        mavlink10.messages.optical_flow.prototype = new mavlink10.message;
mavlink10.messages.optical_flow.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.flow_comp_m_x, this.flow_comp_m_y, this.ground_distance, this.flow_x, this.flow_y, this.sensor_id, this.quality]));
}

/* 


                usec                      : Timestamp (UNIX time or since system boot) (uint64_t)
                x                         : Global X position (float)
                y                         : Global Y position (float)
                z                         : Global Z position (float)
                roll                      : Roll angle (float)
                pitch                     : Pitch angle (float)
                yaw                       : Yaw angle (float)

*/
mavlink10.messages.global_vision_position_estimate = function(usec, x, y, z, roll, pitch, yaw) {

    this.format = '<Qffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_GLOBAL_VISION_POSITION_ESTIMATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 102;
    this.name = 'GLOBAL_VISION_POSITION_ESTIMATE';

    this.fieldnames = ['usec', 'x', 'y', 'z', 'roll', 'pitch', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.global_vision_position_estimate.prototype = new mavlink10.message;
mavlink10.messages.global_vision_position_estimate.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.usec, this.x, this.y, this.z, this.roll, this.pitch, this.yaw]));
}

/* 


                usec                      : Timestamp (UNIX time or time since system boot) (uint64_t)
                x                         : Global X position (float)
                y                         : Global Y position (float)
                z                         : Global Z position (float)
                roll                      : Roll angle (float)
                pitch                     : Pitch angle (float)
                yaw                       : Yaw angle (float)

*/
mavlink10.messages.vision_position_estimate = function(usec, x, y, z, roll, pitch, yaw) {

    this.format = '<Qffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_VISION_POSITION_ESTIMATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 158;
    this.name = 'VISION_POSITION_ESTIMATE';

    this.fieldnames = ['usec', 'x', 'y', 'z', 'roll', 'pitch', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.vision_position_estimate.prototype = new mavlink10.message;
mavlink10.messages.vision_position_estimate.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.usec, this.x, this.y, this.z, this.roll, this.pitch, this.yaw]));
}

/* 


                usec                      : Timestamp (UNIX time or time since system boot) (uint64_t)
                x                         : Global X speed (float)
                y                         : Global Y speed (float)
                z                         : Global Z speed (float)

*/
mavlink10.messages.vision_speed_estimate = function(usec, x, y, z) {

    this.format = '<Qfff';
    this.id = mavlink10.MAVLINK_MSG_ID_VISION_SPEED_ESTIMATE;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 208;
    this.name = 'VISION_SPEED_ESTIMATE';

    this.fieldnames = ['usec', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.vision_speed_estimate.prototype = new mavlink10.message;
mavlink10.messages.vision_speed_estimate.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.usec, this.x, this.y, this.z]));
}

/* 


                usec                      : Timestamp (UNIX time or time since system boot) (uint64_t)
                x                         : Global X position (float)
                y                         : Global Y position (float)
                z                         : Global Z position (float)
                roll                      : Roll angle (float)
                pitch                     : Pitch angle (float)
                yaw                       : Yaw angle (float)

*/
mavlink10.messages.vicon_position_estimate = function(usec, x, y, z, roll, pitch, yaw) {

    this.format = '<Qffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 56;
    this.name = 'VICON_POSITION_ESTIMATE';

    this.fieldnames = ['usec', 'x', 'y', 'z', 'roll', 'pitch', 'yaw'];


    this.set(arguments);

}
        mavlink10.messages.vicon_position_estimate.prototype = new mavlink10.message;
mavlink10.messages.vicon_position_estimate.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.usec, this.x, this.y, this.z, this.roll, this.pitch, this.yaw]));
}

/* 
The IMU readings in SI units in NED body frame

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                xacc                      : X acceleration (float)
                yacc                      : Y acceleration (float)
                zacc                      : Z acceleration (float)
                xgyro                     : Angular speed around X axis (float)
                ygyro                     : Angular speed around Y axis (float)
                zgyro                     : Angular speed around Z axis (float)
                xmag                      : X Magnetic field (float)
                ymag                      : Y Magnetic field (float)
                zmag                      : Z Magnetic field (float)
                abs_pressure              : Absolute pressure (float)
                diff_pressure             : Differential pressure (float)
                pressure_alt              : Altitude calculated from pressure (float)
                temperature               : Temperature (float)
                fields_updated            : Bitmap for fields that have updated since last message, bit 0 = xacc, bit 12: temperature (uint16_t)

*/
mavlink10.messages.highres_imu = function(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) {

    this.format = '<QfffffffffffffH';
    this.id = mavlink10.MAVLINK_MSG_ID_HIGHRES_IMU;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
    this.crc_extra = 93;
    this.name = 'HIGHRES_IMU';

    this.fieldnames = ['time_usec', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag', 'abs_pressure', 'diff_pressure', 'pressure_alt', 'temperature', 'fields_updated'];


    this.set(arguments);

}
        mavlink10.messages.highres_imu.prototype = new mavlink10.message;
mavlink10.messages.highres_imu.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag, this.abs_pressure, this.diff_pressure, this.pressure_alt, this.temperature, this.fields_updated]));
}

/* 
Optical flow from an angular rate flow sensor (e.g. PX4FLOW or mouse
sensor)

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                sensor_id                 : Sensor ID (uint8_t)
                integration_time_us        : Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t)
                integrated_x              : Flow around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float)
                integrated_y              : Flow around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float)
                integrated_xgyro          : RH rotation around X axis (float)
                integrated_ygyro          : RH rotation around Y axis (float)
                integrated_zgyro          : RH rotation around Z axis (float)
                temperature               : Temperature (int16_t)
                quality                   : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t)
                time_delta_distance_us        : Time since the distance was sampled. (uint32_t)
                distance                  : Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance. (float)

*/
mavlink10.messages.optical_flow_rad = function(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) {

    this.format = '<QIfffffIfhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_OPTICAL_FLOW_RAD;
    this.order_map = [0, 10, 1, 2, 3, 4, 5, 6, 9, 11, 7, 8];
    this.crc_extra = 138;
    this.name = 'OPTICAL_FLOW_RAD';

    this.fieldnames = ['time_usec', 'sensor_id', 'integration_time_us', 'integrated_x', 'integrated_y', 'integrated_xgyro', 'integrated_ygyro', 'integrated_zgyro', 'temperature', 'quality', 'time_delta_distance_us', 'distance'];


    this.set(arguments);

}
        mavlink10.messages.optical_flow_rad.prototype = new mavlink10.message;
mavlink10.messages.optical_flow_rad.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.integration_time_us, this.integrated_x, this.integrated_y, this.integrated_xgyro, this.integrated_ygyro, this.integrated_zgyro, this.time_delta_distance_us, this.distance, this.temperature, this.sensor_id, this.quality]));
}

/* 
The IMU readings in SI units in NED body frame

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                xacc                      : X acceleration (float)
                yacc                      : Y acceleration (float)
                zacc                      : Z acceleration (float)
                xgyro                     : Angular speed around X axis in body frame (float)
                ygyro                     : Angular speed around Y axis in body frame (float)
                zgyro                     : Angular speed around Z axis in body frame (float)
                xmag                      : X Magnetic field (float)
                ymag                      : Y Magnetic field (float)
                zmag                      : Z Magnetic field (float)
                abs_pressure              : Absolute pressure (float)
                diff_pressure             : Differential pressure (airspeed) (float)
                pressure_alt              : Altitude calculated from pressure (float)
                temperature               : Temperature (float)
                fields_updated            : Bitmap for fields that have updated since last message, bit 0 = xacc, bit 12: temperature, bit 31: full reset of attitude/position/velocities/etc was performed in sim. (uint32_t)

*/
mavlink10.messages.hil_sensor = function(time_usec, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag, abs_pressure, diff_pressure, pressure_alt, temperature, fields_updated) {

    this.format = '<QfffffffffffffI';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_SENSOR;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
    this.crc_extra = 108;
    this.name = 'HIL_SENSOR';

    this.fieldnames = ['time_usec', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag', 'abs_pressure', 'diff_pressure', 'pressure_alt', 'temperature', 'fields_updated'];


    this.set(arguments);

}
        mavlink10.messages.hil_sensor.prototype = new mavlink10.message;
mavlink10.messages.hil_sensor.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag, this.abs_pressure, this.diff_pressure, this.pressure_alt, this.temperature, this.fields_updated]));
}

/* 
Status of simulation environment, if used

                q1                        : True attitude quaternion component 1, w (1 in null-rotation) (float)
                q2                        : True attitude quaternion component 2, x (0 in null-rotation) (float)
                q3                        : True attitude quaternion component 3, y (0 in null-rotation) (float)
                q4                        : True attitude quaternion component 4, z (0 in null-rotation) (float)
                roll                      : Attitude roll expressed as Euler angles, not recommended except for human-readable outputs (float)
                pitch                     : Attitude pitch expressed as Euler angles, not recommended except for human-readable outputs (float)
                yaw                       : Attitude yaw expressed as Euler angles, not recommended except for human-readable outputs (float)
                xacc                      : X acceleration (float)
                yacc                      : Y acceleration (float)
                zacc                      : Z acceleration (float)
                xgyro                     : Angular speed around X axis (float)
                ygyro                     : Angular speed around Y axis (float)
                zgyro                     : Angular speed around Z axis (float)
                lat                       : Latitude (float)
                lon                       : Longitude (float)
                alt                       : Altitude (float)
                std_dev_horz              : Horizontal position standard deviation (float)
                std_dev_vert              : Vertical position standard deviation (float)
                vn                        : True velocity in NORTH direction in earth-fixed NED frame (float)
                ve                        : True velocity in EAST direction in earth-fixed NED frame (float)
                vd                        : True velocity in DOWN direction in earth-fixed NED frame (float)

*/
mavlink10.messages.sim_state = function(q1, q2, q3, q4, roll, pitch, yaw, xacc, yacc, zacc, xgyro, ygyro, zgyro, lat, lon, alt, std_dev_horz, std_dev_vert, vn, ve, vd) {

    this.format = '<fffffffffffffffffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_SIM_STATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20];
    this.crc_extra = 32;
    this.name = 'SIM_STATE';

    this.fieldnames = ['q1', 'q2', 'q3', 'q4', 'roll', 'pitch', 'yaw', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'lat', 'lon', 'alt', 'std_dev_horz', 'std_dev_vert', 'vn', 've', 'vd'];


    this.set(arguments);

}
        mavlink10.messages.sim_state.prototype = new mavlink10.message;
mavlink10.messages.sim_state.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.q1, this.q2, this.q3, this.q4, this.roll, this.pitch, this.yaw, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.lat, this.lon, this.alt, this.std_dev_horz, this.std_dev_vert, this.vn, this.ve, this.vd]));
}

/* 
Status generated by radio and injected into MAVLink stream.

                rssi                      : Local signal strength (uint8_t)
                remrssi                   : Remote signal strength (uint8_t)
                txbuf                     : Remaining free buffer space. (uint8_t)
                noise                     : Background noise level (uint8_t)
                remnoise                  : Remote background noise level (uint8_t)
                rxerrors                  : Receive errors (uint16_t)
                fixed                     : Count of error corrected packets (uint16_t)

*/
mavlink10.messages.radio_status = function(rssi, remrssi, txbuf, noise, remnoise, rxerrors, fixed) {

    this.format = '<HHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_RADIO_STATUS;
    this.order_map = [2, 3, 4, 5, 6, 0, 1];
    this.crc_extra = 185;
    this.name = 'RADIO_STATUS';

    this.fieldnames = ['rssi', 'remrssi', 'txbuf', 'noise', 'remnoise', 'rxerrors', 'fixed'];


    this.set(arguments);

}
        mavlink10.messages.radio_status.prototype = new mavlink10.message;
mavlink10.messages.radio_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.rxerrors, this.fixed, this.rssi, this.remrssi, this.txbuf, this.noise, this.remnoise]));
}

/* 
File transfer message

                target_network            : Network ID (0 for broadcast) (uint8_t)
                target_system             : System ID (0 for broadcast) (uint8_t)
                target_component          : Component ID (0 for broadcast) (uint8_t)
                payload                   : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields.  The entire content of this block is opaque unless you understand any the encoding message_type.  The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t)

*/
mavlink10.messages.file_transfer_protocol = function(target_network, target_system, target_component, payload) {

    this.format = '<BBB251s';
    this.id = mavlink10.MAVLINK_MSG_ID_FILE_TRANSFER_PROTOCOL;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 84;
    this.name = 'FILE_TRANSFER_PROTOCOL';

    this.fieldnames = ['target_network', 'target_system', 'target_component', 'payload'];


    this.set(arguments);

}
        mavlink10.messages.file_transfer_protocol.prototype = new mavlink10.message;
mavlink10.messages.file_transfer_protocol.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_network, this.target_system, this.target_component, this.payload]));
}

/* 
Time synchronization message.

                tc1                       : Time sync timestamp 1 (int64_t)
                ts1                       : Time sync timestamp 2 (int64_t)

*/
mavlink10.messages.timesync = function(tc1, ts1) {

    this.format = '<qq';
    this.id = mavlink10.MAVLINK_MSG_ID_TIMESYNC;
    this.order_map = [0, 1];
    this.crc_extra = 34;
    this.name = 'TIMESYNC';

    this.fieldnames = ['tc1', 'ts1'];


    this.set(arguments);

}
        mavlink10.messages.timesync.prototype = new mavlink10.message;
mavlink10.messages.timesync.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.tc1, this.ts1]));
}

/* 
Camera-IMU triggering and synchronisation message.

                time_usec                 : Timestamp for image frame (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                seq                       : Image frame sequence (uint32_t)

*/
mavlink10.messages.camera_trigger = function(time_usec, seq) {

    this.format = '<QI';
    this.id = mavlink10.MAVLINK_MSG_ID_CAMERA_TRIGGER;
    this.order_map = [0, 1];
    this.crc_extra = 174;
    this.name = 'CAMERA_TRIGGER';

    this.fieldnames = ['time_usec', 'seq'];


    this.set(arguments);

}
        mavlink10.messages.camera_trigger.prototype = new mavlink10.message;
mavlink10.messages.camera_trigger.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.seq]));
}

/* 
The global position, as returned by the Global Positioning System
(GPS). This is                  NOT the global position estimate of
the sytem, but rather a RAW sensor value. See message GLOBAL_POSITION
for the global position estimate.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                fix_type                  : 0-1: no fix, 2: 2D fix, 3: 3D fix. Some applications will not use the value of this field unless it is at least two, so always correctly fill in the fix. (uint8_t)
                lat                       : Latitude (WGS84) (int32_t)
                lon                       : Longitude (WGS84) (int32_t)
                alt                       : Altitude (AMSL). Positive for up. (int32_t)
                eph                       : GPS HDOP horizontal dilution of position. If unknown, set to: 65535 (uint16_t)
                epv                       : GPS VDOP vertical dilution of position. If unknown, set to: 65535 (uint16_t)
                vel                       : GPS ground speed. If unknown, set to: 65535 (uint16_t)
                vn                        : GPS velocity in NORTH direction in earth-fixed NED frame (int16_t)
                ve                        : GPS velocity in EAST direction in earth-fixed NED frame (int16_t)
                vd                        : GPS velocity in DOWN direction in earth-fixed NED frame (int16_t)
                cog                       : Course over ground (NOT heading, but direction of movement), 0.0..359.99 degrees. If unknown, set to: 65535 (uint16_t)
                satellites_visible        : Number of satellites visible. If unknown, set to 255 (uint8_t)

*/
mavlink10.messages.hil_gps = function(time_usec, fix_type, lat, lon, alt, eph, epv, vel, vn, ve, vd, cog, satellites_visible) {

    this.format = '<QiiiHHHhhhHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_GPS;
    this.order_map = [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12];
    this.crc_extra = 124;
    this.name = 'HIL_GPS';

    this.fieldnames = ['time_usec', 'fix_type', 'lat', 'lon', 'alt', 'eph', 'epv', 'vel', 'vn', 've', 'vd', 'cog', 'satellites_visible'];


    this.set(arguments);

}
        mavlink10.messages.hil_gps.prototype = new mavlink10.message;
mavlink10.messages.hil_gps.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.lat, this.lon, this.alt, this.eph, this.epv, this.vel, this.vn, this.ve, this.vd, this.cog, this.fix_type, this.satellites_visible]));
}

/* 
Simulated optical flow from a flow sensor (e.g. PX4FLOW or optical
mouse sensor)

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                sensor_id                 : Sensor ID (uint8_t)
                integration_time_us        : Integration time. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the. (uint32_t)
                integrated_x              : Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.) (float)
                integrated_y              : Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.) (float)
                integrated_xgyro          : RH rotation around X axis (float)
                integrated_ygyro          : RH rotation around Y axis (float)
                integrated_zgyro          : RH rotation around Z axis (float)
                temperature               : Temperature (int16_t)
                quality                   : Optical flow quality / confidence. 0: no valid flow, 255: maximum quality (uint8_t)
                time_delta_distance_us        : Time since the distance was sampled. (uint32_t)
                distance                  : Distance to the center of the flow field. Positive value (including zero): distance known. Negative value: Unknown distance. (float)

*/
mavlink10.messages.hil_optical_flow = function(time_usec, sensor_id, integration_time_us, integrated_x, integrated_y, integrated_xgyro, integrated_ygyro, integrated_zgyro, temperature, quality, time_delta_distance_us, distance) {

    this.format = '<QIfffffIfhBB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_OPTICAL_FLOW;
    this.order_map = [0, 10, 1, 2, 3, 4, 5, 6, 9, 11, 7, 8];
    this.crc_extra = 237;
    this.name = 'HIL_OPTICAL_FLOW';

    this.fieldnames = ['time_usec', 'sensor_id', 'integration_time_us', 'integrated_x', 'integrated_y', 'integrated_xgyro', 'integrated_ygyro', 'integrated_zgyro', 'temperature', 'quality', 'time_delta_distance_us', 'distance'];


    this.set(arguments);

}
        mavlink10.messages.hil_optical_flow.prototype = new mavlink10.message;
mavlink10.messages.hil_optical_flow.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.integration_time_us, this.integrated_x, this.integrated_y, this.integrated_xgyro, this.integrated_ygyro, this.integrated_zgyro, this.time_delta_distance_us, this.distance, this.temperature, this.sensor_id, this.quality]));
}

/* 
Sent from simulation to autopilot, avoids in contrast to HIL_STATE
singularities. This packet is useful for high throughput applications
such as hardware in the loop simulations.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                attitude_quaternion        : Vehicle attitude expressed as normalized quaternion in w, x, y, z order (with 1 0 0 0 being the null-rotation) (float)
                rollspeed                 : Body frame roll / phi angular speed (float)
                pitchspeed                : Body frame pitch / theta angular speed (float)
                yawspeed                  : Body frame yaw / psi angular speed (float)
                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)
                alt                       : Altitude (int32_t)
                vx                        : Ground X Speed (Latitude) (int16_t)
                vy                        : Ground Y Speed (Longitude) (int16_t)
                vz                        : Ground Z Speed (Altitude) (int16_t)
                ind_airspeed              : Indicated airspeed (uint16_t)
                true_airspeed             : True airspeed (uint16_t)
                xacc                      : X acceleration (int16_t)
                yacc                      : Y acceleration (int16_t)
                zacc                      : Z acceleration (int16_t)

*/
mavlink10.messages.hil_state_quaternion = function(time_usec, attitude_quaternion, rollspeed, pitchspeed, yawspeed, lat, lon, alt, vx, vy, vz, ind_airspeed, true_airspeed, xacc, yacc, zacc) {

    this.format = '<Q4ffffiiihhhHHhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_HIL_STATE_QUATERNION;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
    this.crc_extra = 4;
    this.name = 'HIL_STATE_QUATERNION';

    this.fieldnames = ['time_usec', 'attitude_quaternion', 'rollspeed', 'pitchspeed', 'yawspeed', 'lat', 'lon', 'alt', 'vx', 'vy', 'vz', 'ind_airspeed', 'true_airspeed', 'xacc', 'yacc', 'zacc'];


    this.set(arguments);

}
        mavlink10.messages.hil_state_quaternion.prototype = new mavlink10.message;
mavlink10.messages.hil_state_quaternion.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.attitude_quaternion, this.rollspeed, this.pitchspeed, this.yawspeed, this.lat, this.lon, this.alt, this.vx, this.vy, this.vz, this.ind_airspeed, this.true_airspeed, this.xacc, this.yacc, this.zacc]));
}

/* 
The RAW IMU readings for secondary 9DOF sensor setup. This message
should contain the scaled values to the described units

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                xacc                      : X acceleration (int16_t)
                yacc                      : Y acceleration (int16_t)
                zacc                      : Z acceleration (int16_t)
                xgyro                     : Angular speed around X axis (int16_t)
                ygyro                     : Angular speed around Y axis (int16_t)
                zgyro                     : Angular speed around Z axis (int16_t)
                xmag                      : X Magnetic field (int16_t)
                ymag                      : Y Magnetic field (int16_t)
                zmag                      : Z Magnetic field (int16_t)

*/
mavlink10.messages.scaled_imu2 = function(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) {

    this.format = '<Ihhhhhhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_IMU2;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 76;
    this.name = 'SCALED_IMU2';

    this.fieldnames = ['time_boot_ms', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag'];


    this.set(arguments);

}
        mavlink10.messages.scaled_imu2.prototype = new mavlink10.message;
mavlink10.messages.scaled_imu2.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag]));
}

/* 
Request a list of available logs. On some systems calling this may
stop on-board logging until LOG_REQUEST_END is called.

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                start                     : First log id (0 for first available) (uint16_t)
                end                       : Last log id (0xffff for last available) (uint16_t)

*/
mavlink10.messages.log_request_list = function(target_system, target_component, start, end) {

    this.format = '<HHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_LIST;
    this.order_map = [2, 3, 0, 1];
    this.crc_extra = 128;
    this.name = 'LOG_REQUEST_LIST';

    this.fieldnames = ['target_system', 'target_component', 'start', 'end'];


    this.set(arguments);

}
        mavlink10.messages.log_request_list.prototype = new mavlink10.message;
mavlink10.messages.log_request_list.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.start, this.end, this.target_system, this.target_component]));
}

/* 
Reply to LOG_REQUEST_LIST

                id                        : Log id (uint16_t)
                num_logs                  : Total number of logs (uint16_t)
                last_log_num              : High log number (uint16_t)
                time_utc                  : UTC timestamp of log since 1970, or 0 if not available (uint32_t)
                size                      : Size of the log (may be approximate) (uint32_t)

*/
mavlink10.messages.log_entry = function(id, num_logs, last_log_num, time_utc, size) {

    this.format = '<IIHHH';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_ENTRY;
    this.order_map = [2, 3, 4, 0, 1];
    this.crc_extra = 56;
    this.name = 'LOG_ENTRY';

    this.fieldnames = ['id', 'num_logs', 'last_log_num', 'time_utc', 'size'];


    this.set(arguments);

}
        mavlink10.messages.log_entry.prototype = new mavlink10.message;
mavlink10.messages.log_entry.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_utc, this.size, this.id, this.num_logs, this.last_log_num]));
}

/* 
Request a chunk of a log

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                id                        : Log id (from LOG_ENTRY reply) (uint16_t)
                ofs                       : Offset into the log (uint32_t)
                count                     : Number of bytes (uint32_t)

*/
mavlink10.messages.log_request_data = function(target_system, target_component, id, ofs, count) {

    this.format = '<IIHBB';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_DATA;
    this.order_map = [3, 4, 2, 0, 1];
    this.crc_extra = 116;
    this.name = 'LOG_REQUEST_DATA';

    this.fieldnames = ['target_system', 'target_component', 'id', 'ofs', 'count'];


    this.set(arguments);

}
        mavlink10.messages.log_request_data.prototype = new mavlink10.message;
mavlink10.messages.log_request_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.ofs, this.count, this.id, this.target_system, this.target_component]));
}

/* 
Reply to LOG_REQUEST_DATA

                id                        : Log id (from LOG_ENTRY reply) (uint16_t)
                ofs                       : Offset into the log (uint32_t)
                count                     : Number of bytes (zero for end of log) (uint8_t)
                data                      : log data (uint8_t)

*/
mavlink10.messages.log_data = function(id, ofs, count, data) {

    this.format = '<IHB90s';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_DATA;
    this.order_map = [1, 0, 2, 3];
    this.crc_extra = 134;
    this.name = 'LOG_DATA';

    this.fieldnames = ['id', 'ofs', 'count', 'data'];


    this.set(arguments);

}
        mavlink10.messages.log_data.prototype = new mavlink10.message;
mavlink10.messages.log_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.ofs, this.id, this.count, this.data]));
}

/* 
Erase all logs

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)

*/
mavlink10.messages.log_erase = function(target_system, target_component) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_ERASE;
    this.order_map = [0, 1];
    this.crc_extra = 237;
    this.name = 'LOG_ERASE';

    this.fieldnames = ['target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.log_erase.prototype = new mavlink10.message;
mavlink10.messages.log_erase.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component]));
}

/* 
Stop log transfer and resume normal logging

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)

*/
mavlink10.messages.log_request_end = function(target_system, target_component) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_LOG_REQUEST_END;
    this.order_map = [0, 1];
    this.crc_extra = 203;
    this.name = 'LOG_REQUEST_END';

    this.fieldnames = ['target_system', 'target_component'];


    this.set(arguments);

}
        mavlink10.messages.log_request_end.prototype = new mavlink10.message;
mavlink10.messages.log_request_end.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component]));
}

/* 
data for injecting into the onboard GPS (used for DGPS)

                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                len                       : data length (uint8_t)
                data                      : raw data (110 is enough for 12 satellites of RTCMv2) (uint8_t)

*/
mavlink10.messages.gps_inject_data = function(target_system, target_component, len, data) {

    this.format = '<BBB110s';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_INJECT_DATA;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 250;
    this.name = 'GPS_INJECT_DATA';

    this.fieldnames = ['target_system', 'target_component', 'len', 'data'];


    this.set(arguments);

}
        mavlink10.messages.gps_inject_data.prototype = new mavlink10.message;
mavlink10.messages.gps_inject_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.target_system, this.target_component, this.len, this.data]));
}

/* 
Second GPS data.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                fix_type                  : GPS fix type. (uint8_t)
                lat                       : Latitude (WGS84) (int32_t)
                lon                       : Longitude (WGS84) (int32_t)
                alt                       : Altitude (AMSL). Positive for up. (int32_t)
                eph                       : GPS HDOP horizontal dilution of position. If unknown, set to: UINT16_MAX (uint16_t)
                epv                       : GPS VDOP vertical dilution of position. If unknown, set to: UINT16_MAX (uint16_t)
                vel                       : GPS ground speed. If unknown, set to: UINT16_MAX (uint16_t)
                cog                       : Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX (uint16_t)
                satellites_visible        : Number of satellites visible. If unknown, set to 255 (uint8_t)
                dgps_numch                : Number of DGPS satellites (uint8_t)
                dgps_age                  : Age of DGPS info (uint32_t)

*/
mavlink10.messages.gps2_raw = function(time_usec, fix_type, lat, lon, alt, eph, epv, vel, cog, satellites_visible, dgps_numch, dgps_age) {

    this.format = '<QiiiIHHHHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS2_RAW;
    this.order_map = [0, 9, 1, 2, 3, 5, 6, 7, 8, 10, 11, 4];
    this.crc_extra = 87;
    this.name = 'GPS2_RAW';

    this.fieldnames = ['time_usec', 'fix_type', 'lat', 'lon', 'alt', 'eph', 'epv', 'vel', 'cog', 'satellites_visible', 'dgps_numch', 'dgps_age'];


    this.set(arguments);

}
        mavlink10.messages.gps2_raw.prototype = new mavlink10.message;
mavlink10.messages.gps2_raw.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.lat, this.lon, this.alt, this.dgps_age, this.eph, this.epv, this.vel, this.cog, this.fix_type, this.satellites_visible, this.dgps_numch]));
}

/* 
Power supply status

                Vcc                       : 5V rail voltage. (uint16_t)
                Vservo                    : Servo rail voltage. (uint16_t)
                flags                     : Bitmap of power supply status flags. (uint16_t)

*/
mavlink10.messages.power_status = function(Vcc, Vservo, flags) {

    this.format = '<HHH';
    this.id = mavlink10.MAVLINK_MSG_ID_POWER_STATUS;
    this.order_map = [0, 1, 2];
    this.crc_extra = 203;
    this.name = 'POWER_STATUS';

    this.fieldnames = ['Vcc', 'Vservo', 'flags'];


    this.set(arguments);

}
        mavlink10.messages.power_status.prototype = new mavlink10.message;
mavlink10.messages.power_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.Vcc, this.Vservo, this.flags]));
}

/* 
Control a serial port. This can be used for raw access to an onboard
serial peripheral such as a GPS or telemetry radio. It is designed to
make it possible to update the devices firmware via MAVLink messages
or change the devices settings. A message with zero bytes can be used
to change just the baudrate.

                device                    : Serial control device type. (uint8_t)
                flags                     : Bitmap of serial control flags. (uint8_t)
                timeout                   : Timeout for reply data (uint16_t)
                baudrate                  : Baudrate of transfer. Zero means no change. (uint32_t)
                count                     : how many bytes in this transfer (uint8_t)
                data                      : serial data (uint8_t)

*/
mavlink10.messages.serial_control = function(device, flags, timeout, baudrate, count, data) {

    this.format = '<IHBBB70s';
    this.id = mavlink10.MAVLINK_MSG_ID_SERIAL_CONTROL;
    this.order_map = [2, 3, 1, 0, 4, 5];
    this.crc_extra = 220;
    this.name = 'SERIAL_CONTROL';

    this.fieldnames = ['device', 'flags', 'timeout', 'baudrate', 'count', 'data'];


    this.set(arguments);

}
        mavlink10.messages.serial_control.prototype = new mavlink10.message;
mavlink10.messages.serial_control.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.baudrate, this.timeout, this.device, this.flags, this.count, this.data]));
}

/* 
RTK GPS data. Gives information on the relative baseline calculation
the GPS is reporting

                time_last_baseline_ms        : Time since boot of last baseline message received. (uint32_t)
                rtk_receiver_id           : Identification of connected RTK receiver. (uint8_t)
                wn                        : GPS Week Number of last baseline (uint16_t)
                tow                       : GPS Time of Week of last baseline (uint32_t)
                rtk_health                : GPS-specific health report for RTK data. (uint8_t)
                rtk_rate                  : Rate of baseline messages being received by GPS (uint8_t)
                nsats                     : Current number of sats used for RTK calculation. (uint8_t)
                baseline_coords_type        : Coordinate system of baseline (uint8_t)
                baseline_a_mm             : Current baseline in ECEF x or NED north component. (int32_t)
                baseline_b_mm             : Current baseline in ECEF y or NED east component. (int32_t)
                baseline_c_mm             : Current baseline in ECEF z or NED down component. (int32_t)
                accuracy                  : Current estimate of baseline accuracy. (uint32_t)
                iar_num_hypotheses        : Current number of integer ambiguity hypotheses. (int32_t)

*/
mavlink10.messages.gps_rtk = function(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) {

    this.format = '<IIiiiIiHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_RTK;
    this.order_map = [0, 8, 7, 1, 9, 10, 11, 12, 2, 3, 4, 5, 6];
    this.crc_extra = 25;
    this.name = 'GPS_RTK';

    this.fieldnames = ['time_last_baseline_ms', 'rtk_receiver_id', 'wn', 'tow', 'rtk_health', 'rtk_rate', 'nsats', 'baseline_coords_type', 'baseline_a_mm', 'baseline_b_mm', 'baseline_c_mm', 'accuracy', 'iar_num_hypotheses'];


    this.set(arguments);

}
        mavlink10.messages.gps_rtk.prototype = new mavlink10.message;
mavlink10.messages.gps_rtk.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_last_baseline_ms, this.tow, this.baseline_a_mm, this.baseline_b_mm, this.baseline_c_mm, this.accuracy, this.iar_num_hypotheses, this.wn, this.rtk_receiver_id, this.rtk_health, this.rtk_rate, this.nsats, this.baseline_coords_type]));
}

/* 
RTK GPS data. Gives information on the relative baseline calculation
the GPS is reporting

                time_last_baseline_ms        : Time since boot of last baseline message received. (uint32_t)
                rtk_receiver_id           : Identification of connected RTK receiver. (uint8_t)
                wn                        : GPS Week Number of last baseline (uint16_t)
                tow                       : GPS Time of Week of last baseline (uint32_t)
                rtk_health                : GPS-specific health report for RTK data. (uint8_t)
                rtk_rate                  : Rate of baseline messages being received by GPS (uint8_t)
                nsats                     : Current number of sats used for RTK calculation. (uint8_t)
                baseline_coords_type        : Coordinate system of baseline (uint8_t)
                baseline_a_mm             : Current baseline in ECEF x or NED north component. (int32_t)
                baseline_b_mm             : Current baseline in ECEF y or NED east component. (int32_t)
                baseline_c_mm             : Current baseline in ECEF z or NED down component. (int32_t)
                accuracy                  : Current estimate of baseline accuracy. (uint32_t)
                iar_num_hypotheses        : Current number of integer ambiguity hypotheses. (int32_t)

*/
mavlink10.messages.gps2_rtk = function(time_last_baseline_ms, rtk_receiver_id, wn, tow, rtk_health, rtk_rate, nsats, baseline_coords_type, baseline_a_mm, baseline_b_mm, baseline_c_mm, accuracy, iar_num_hypotheses) {

    this.format = '<IIiiiIiHBBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS2_RTK;
    this.order_map = [0, 8, 7, 1, 9, 10, 11, 12, 2, 3, 4, 5, 6];
    this.crc_extra = 226;
    this.name = 'GPS2_RTK';

    this.fieldnames = ['time_last_baseline_ms', 'rtk_receiver_id', 'wn', 'tow', 'rtk_health', 'rtk_rate', 'nsats', 'baseline_coords_type', 'baseline_a_mm', 'baseline_b_mm', 'baseline_c_mm', 'accuracy', 'iar_num_hypotheses'];


    this.set(arguments);

}
        mavlink10.messages.gps2_rtk.prototype = new mavlink10.message;
mavlink10.messages.gps2_rtk.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_last_baseline_ms, this.tow, this.baseline_a_mm, this.baseline_b_mm, this.baseline_c_mm, this.accuracy, this.iar_num_hypotheses, this.wn, this.rtk_receiver_id, this.rtk_health, this.rtk_rate, this.nsats, this.baseline_coords_type]));
}

/* 
The RAW IMU readings for 3rd 9DOF sensor setup. This message should
contain the scaled values to the described units

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                xacc                      : X acceleration (int16_t)
                yacc                      : Y acceleration (int16_t)
                zacc                      : Z acceleration (int16_t)
                xgyro                     : Angular speed around X axis (int16_t)
                ygyro                     : Angular speed around Y axis (int16_t)
                zgyro                     : Angular speed around Z axis (int16_t)
                xmag                      : X Magnetic field (int16_t)
                ymag                      : Y Magnetic field (int16_t)
                zmag                      : Z Magnetic field (int16_t)

*/
mavlink10.messages.scaled_imu3 = function(time_boot_ms, xacc, yacc, zacc, xgyro, ygyro, zgyro, xmag, ymag, zmag) {

    this.format = '<Ihhhhhhhhh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_IMU3;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 46;
    this.name = 'SCALED_IMU3';

    this.fieldnames = ['time_boot_ms', 'xacc', 'yacc', 'zacc', 'xgyro', 'ygyro', 'zgyro', 'xmag', 'ymag', 'zmag'];


    this.set(arguments);

}
        mavlink10.messages.scaled_imu3.prototype = new mavlink10.message;
mavlink10.messages.scaled_imu3.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.xacc, this.yacc, this.zacc, this.xgyro, this.ygyro, this.zgyro, this.xmag, this.ymag, this.zmag]));
}

/* 


                type                      : Type of requested/acknowledged data. (uint8_t)
                size                      : total data size (set on ACK only). (uint32_t)
                width                     : Width of a matrix or image. (uint16_t)
                height                    : Height of a matrix or image. (uint16_t)
                packets                   : Number of packets being sent (set on ACK only). (uint16_t)
                payload                   : Payload size per packet (normally 253 byte, see DATA field size in message ENCAPSULATED_DATA) (set on ACK only). (uint8_t)
                jpg_quality               : JPEG quality. Values: [1-100]. (uint8_t)

*/
mavlink10.messages.data_transmission_handshake = function(type, size, width, height, packets, payload, jpg_quality) {

    this.format = '<IHHHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE;
    this.order_map = [4, 0, 1, 2, 3, 5, 6];
    this.crc_extra = 29;
    this.name = 'DATA_TRANSMISSION_HANDSHAKE';

    this.fieldnames = ['type', 'size', 'width', 'height', 'packets', 'payload', 'jpg_quality'];


    this.set(arguments);

}
        mavlink10.messages.data_transmission_handshake.prototype = new mavlink10.message;
mavlink10.messages.data_transmission_handshake.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.size, this.width, this.height, this.packets, this.type, this.payload, this.jpg_quality]));
}

/* 


                seqnr                     : sequence number (starting with 0 on every transmission) (uint16_t)
                data                      : image data bytes (uint8_t)

*/
mavlink10.messages.encapsulated_data = function(seqnr, data) {

    this.format = '<H253s';
    this.id = mavlink10.MAVLINK_MSG_ID_ENCAPSULATED_DATA;
    this.order_map = [0, 1];
    this.crc_extra = 223;
    this.name = 'ENCAPSULATED_DATA';

    this.fieldnames = ['seqnr', 'data'];


    this.set(arguments);

}
        mavlink10.messages.encapsulated_data.prototype = new mavlink10.message;
mavlink10.messages.encapsulated_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.seqnr, this.data]));
}

/* 


                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                min_distance              : Minimum distance the sensor can measure (uint16_t)
                max_distance              : Maximum distance the sensor can measure (uint16_t)
                current_distance          : Current distance reading (uint16_t)
                type                      : Type of distance sensor. (uint8_t)
                id                        : Onboard ID of the sensor (uint8_t)
                orientation               : Direction the sensor faces. downward-facing: ROTATION_PITCH_270, upward-facing: ROTATION_PITCH_90, backward-facing: ROTATION_PITCH_180, forward-facing: ROTATION_NONE, left-facing: ROTATION_YAW_90, right-facing: ROTATION_YAW_270 (uint8_t)
                covariance                : Measurement covariance, 0 for unknown / invalid readings (uint8_t)

*/
mavlink10.messages.distance_sensor = function(time_boot_ms, min_distance, max_distance, current_distance, type, id, orientation, covariance) {

    this.format = '<IHHHBBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_DISTANCE_SENSOR;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7];
    this.crc_extra = 85;
    this.name = 'DISTANCE_SENSOR';

    this.fieldnames = ['time_boot_ms', 'min_distance', 'max_distance', 'current_distance', 'type', 'id', 'orientation', 'covariance'];


    this.set(arguments);

}
        mavlink10.messages.distance_sensor.prototype = new mavlink10.message;
mavlink10.messages.distance_sensor.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.min_distance, this.max_distance, this.current_distance, this.type, this.id, this.orientation, this.covariance]));
}

/* 
Request for terrain data and terrain status

                lat                       : Latitude of SW corner of first grid (int32_t)
                lon                       : Longitude of SW corner of first grid (int32_t)
                grid_spacing              : Grid spacing (uint16_t)
                mask                      : Bitmask of requested 4x4 grids (row major 8x7 array of grids, 56 bits) (uint64_t)

*/
mavlink10.messages.terrain_request = function(lat, lon, grid_spacing, mask) {

    this.format = '<QiiH';
    this.id = mavlink10.MAVLINK_MSG_ID_TERRAIN_REQUEST;
    this.order_map = [1, 2, 3, 0];
    this.crc_extra = 6;
    this.name = 'TERRAIN_REQUEST';

    this.fieldnames = ['lat', 'lon', 'grid_spacing', 'mask'];


    this.set(arguments);

}
        mavlink10.messages.terrain_request.prototype = new mavlink10.message;
mavlink10.messages.terrain_request.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.mask, this.lat, this.lon, this.grid_spacing]));
}

/* 
Terrain data sent from GCS. The lat/lon and grid_spacing must be the
same as a lat/lon from a TERRAIN_REQUEST

                lat                       : Latitude of SW corner of first grid (int32_t)
                lon                       : Longitude of SW corner of first grid (int32_t)
                grid_spacing              : Grid spacing (uint16_t)
                gridbit                   : bit within the terrain request mask (uint8_t)
                data                      : Terrain data AMSL (int16_t)

*/
mavlink10.messages.terrain_data = function(lat, lon, grid_spacing, gridbit, data) {

    this.format = '<iiH16hB';
    this.id = mavlink10.MAVLINK_MSG_ID_TERRAIN_DATA;
    this.order_map = [0, 1, 2, 4, 3];
    this.crc_extra = 229;
    this.name = 'TERRAIN_DATA';

    this.fieldnames = ['lat', 'lon', 'grid_spacing', 'gridbit', 'data'];


    this.set(arguments);

}
        mavlink10.messages.terrain_data.prototype = new mavlink10.message;
mavlink10.messages.terrain_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lat, this.lon, this.grid_spacing, this.data, this.gridbit]));
}

/* 
Request that the vehicle report terrain height at the given location.
Used by GCS to check if vehicle has all terrain data needed for a
mission.

                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)

*/
mavlink10.messages.terrain_check = function(lat, lon) {

    this.format = '<ii';
    this.id = mavlink10.MAVLINK_MSG_ID_TERRAIN_CHECK;
    this.order_map = [0, 1];
    this.crc_extra = 203;
    this.name = 'TERRAIN_CHECK';

    this.fieldnames = ['lat', 'lon'];


    this.set(arguments);

}
        mavlink10.messages.terrain_check.prototype = new mavlink10.message;
mavlink10.messages.terrain_check.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lat, this.lon]));
}

/* 
Response from a TERRAIN_CHECK request

                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)
                spacing                   : grid spacing (zero if terrain at this location unavailable) (uint16_t)
                terrain_height            : Terrain height AMSL (float)
                current_height            : Current vehicle height above lat/lon terrain height (float)
                pending                   : Number of 4x4 terrain blocks waiting to be received or read from disk (uint16_t)
                loaded                    : Number of 4x4 terrain blocks in memory (uint16_t)

*/
mavlink10.messages.terrain_report = function(lat, lon, spacing, terrain_height, current_height, pending, loaded) {

    this.format = '<iiffHHH';
    this.id = mavlink10.MAVLINK_MSG_ID_TERRAIN_REPORT;
    this.order_map = [0, 1, 4, 2, 3, 5, 6];
    this.crc_extra = 1;
    this.name = 'TERRAIN_REPORT';

    this.fieldnames = ['lat', 'lon', 'spacing', 'terrain_height', 'current_height', 'pending', 'loaded'];


    this.set(arguments);

}
        mavlink10.messages.terrain_report.prototype = new mavlink10.message;
mavlink10.messages.terrain_report.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.lat, this.lon, this.terrain_height, this.current_height, this.spacing, this.pending, this.loaded]));
}

/* 
Barometer readings for 2nd barometer

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                press_abs                 : Absolute pressure (float)
                press_diff                : Differential pressure (float)
                temperature               : Temperature measurement (int16_t)

*/
mavlink10.messages.scaled_pressure2 = function(time_boot_ms, press_abs, press_diff, temperature) {

    this.format = '<Iffh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE2;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 195;
    this.name = 'SCALED_PRESSURE2';

    this.fieldnames = ['time_boot_ms', 'press_abs', 'press_diff', 'temperature'];


    this.set(arguments);

}
        mavlink10.messages.scaled_pressure2.prototype = new mavlink10.message;
mavlink10.messages.scaled_pressure2.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.press_abs, this.press_diff, this.temperature]));
}

/* 
Motion capture attitude and position

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                q                         : Attitude quaternion (w, x, y, z order, zero-rotation is 1, 0, 0, 0) (float)
                x                         : X position (NED) (float)
                y                         : Y position (NED) (float)
                z                         : Z position (NED) (float)

*/
mavlink10.messages.att_pos_mocap = function(time_usec, q, x, y, z) {

    this.format = '<Q4ffff';
    this.id = mavlink10.MAVLINK_MSG_ID_ATT_POS_MOCAP;
    this.order_map = [0, 1, 2, 3, 4];
    this.crc_extra = 109;
    this.name = 'ATT_POS_MOCAP';

    this.fieldnames = ['time_usec', 'q', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.att_pos_mocap.prototype = new mavlink10.message;
mavlink10.messages.att_pos_mocap.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.q, this.x, this.y, this.z]));
}

/* 
Set the vehicle attitude and body angular rates.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                group_mlx                 : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t)
                target_system             : System ID (uint8_t)
                target_component          : Component ID (uint8_t)
                controls                  : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float)

*/
mavlink10.messages.set_actuator_control_target = function(time_usec, group_mlx, target_system, target_component, controls) {

    this.format = '<Q8fBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_ACTUATOR_CONTROL_TARGET;
    this.order_map = [0, 2, 3, 4, 1];
    this.crc_extra = 168;
    this.name = 'SET_ACTUATOR_CONTROL_TARGET';

    this.fieldnames = ['time_usec', 'group_mlx', 'target_system', 'target_component', 'controls'];


    this.set(arguments);

}
        mavlink10.messages.set_actuator_control_target.prototype = new mavlink10.message;
mavlink10.messages.set_actuator_control_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.controls, this.group_mlx, this.target_system, this.target_component]));
}

/* 
Set the vehicle attitude and body angular rates.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                group_mlx                 : Actuator group. The "_mlx" indicates this is a multi-instance message and a MAVLink parser should use this field to difference between instances. (uint8_t)
                controls                  : Actuator controls. Normed to -1..+1 where 0 is neutral position. Throttle for single rotation direction motors is 0..1, negative range for reverse direction. Standard mapping for attitude controls (group 0): (index 0-7): roll, pitch, yaw, throttle, flaps, spoilers, airbrakes, landing gear. Load a pass-through mixer to repurpose them as generic outputs. (float)

*/
mavlink10.messages.actuator_control_target = function(time_usec, group_mlx, controls) {

    this.format = '<Q8fB';
    this.id = mavlink10.MAVLINK_MSG_ID_ACTUATOR_CONTROL_TARGET;
    this.order_map = [0, 2, 1];
    this.crc_extra = 181;
    this.name = 'ACTUATOR_CONTROL_TARGET';

    this.fieldnames = ['time_usec', 'group_mlx', 'controls'];


    this.set(arguments);

}
        mavlink10.messages.actuator_control_target.prototype = new mavlink10.message;
mavlink10.messages.actuator_control_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.controls, this.group_mlx]));
}

/* 
The current system altitude.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                altitude_monotonic        : This altitude measure is initialized on system boot and monotonic (it is never reset, but represents the local altitude change). The only guarantee on this field is that it will never be reset and is consistent within a flight. The recommended value for this field is the uncorrected barometric altitude at boot time. This altitude will also drift and vary between flights. (float)
                altitude_amsl             : This altitude measure is strictly above mean sea level and might be non-monotonic (it might reset on events like GPS lock or when a new QNH value is set). It should be the altitude to which global altitude waypoints are compared to. Note that it is *not* the GPS altitude, however, most GPS modules already output AMSL by default and not the WGS84 altitude. (float)
                altitude_local            : This is the local altitude in the local coordinate frame. It is not the altitude above home, but in reference to the coordinate origin (0, 0, 0). It is up-positive. (float)
                altitude_relative         : This is the altitude above the home position. It resets on each change of the current home position. (float)
                altitude_terrain          : This is the altitude above terrain. It might be fed by a terrain database or an altimeter. Values smaller than -1000 should be interpreted as unknown. (float)
                bottom_clearance          : This is not the altitude, but the clear space below the system according to the fused clearance estimate. It generally should max out at the maximum range of e.g. the laser altimeter. It is generally a moving target. A negative value indicates no measurement available. (float)

*/
mavlink10.messages.altitude = function(time_usec, altitude_monotonic, altitude_amsl, altitude_local, altitude_relative, altitude_terrain, bottom_clearance) {

    this.format = '<Qffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_ALTITUDE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 47;
    this.name = 'ALTITUDE';

    this.fieldnames = ['time_usec', 'altitude_monotonic', 'altitude_amsl', 'altitude_local', 'altitude_relative', 'altitude_terrain', 'bottom_clearance'];


    this.set(arguments);

}
        mavlink10.messages.altitude.prototype = new mavlink10.message;
mavlink10.messages.altitude.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.altitude_monotonic, this.altitude_amsl, this.altitude_local, this.altitude_relative, this.altitude_terrain, this.bottom_clearance]));
}

/* 
The autopilot is requesting a resource (file, binary, other type of
data)

                request_id                : Request ID. This ID should be re-used when sending back URI contents (uint8_t)
                uri_type                  : The type of requested URI. 0 = a file via URL. 1 = a UAVCAN binary (uint8_t)
                uri                       : The requested unique resource identifier (URI). It is not necessarily a straight domain name (depends on the URI type enum) (uint8_t)
                transfer_type             : The way the autopilot wants to receive the URI. 0 = MAVLink FTP. 1 = binary stream. (uint8_t)
                storage                   : The storage path the autopilot wants the URI to be stored in. Will only be valid if the transfer_type has a storage associated (e.g. MAVLink FTP). (uint8_t)

*/
mavlink10.messages.resource_request = function(request_id, uri_type, uri, transfer_type, storage) {

    this.format = '<BB120sB120s';
    this.id = mavlink10.MAVLINK_MSG_ID_RESOURCE_REQUEST;
    this.order_map = [0, 1, 2, 3, 4];
    this.crc_extra = 72;
    this.name = 'RESOURCE_REQUEST';

    this.fieldnames = ['request_id', 'uri_type', 'uri', 'transfer_type', 'storage'];


    this.set(arguments);

}
        mavlink10.messages.resource_request.prototype = new mavlink10.message;
mavlink10.messages.resource_request.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.request_id, this.uri_type, this.uri, this.transfer_type, this.storage]));
}

/* 
Barometer readings for 3rd barometer

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                press_abs                 : Absolute pressure (float)
                press_diff                : Differential pressure (float)
                temperature               : Temperature measurement (int16_t)

*/
mavlink10.messages.scaled_pressure3 = function(time_boot_ms, press_abs, press_diff, temperature) {

    this.format = '<Iffh';
    this.id = mavlink10.MAVLINK_MSG_ID_SCALED_PRESSURE3;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 131;
    this.name = 'SCALED_PRESSURE3';

    this.fieldnames = ['time_boot_ms', 'press_abs', 'press_diff', 'temperature'];


    this.set(arguments);

}
        mavlink10.messages.scaled_pressure3.prototype = new mavlink10.message;
mavlink10.messages.scaled_pressure3.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.press_abs, this.press_diff, this.temperature]));
}

/* 
current motion information from a designated system

                timestamp                 : Timestamp (time since system boot). (uint64_t)
                est_capabilities          : bit positions for tracker reporting capabilities (POS = 0, VEL = 1, ACCEL = 2, ATT + RATES = 3) (uint8_t)
                lat                       : Latitude (WGS84) (int32_t)
                lon                       : Longitude (WGS84) (int32_t)
                alt                       : Altitude (AMSL) (float)
                vel                       : target velocity (0,0,0) for unknown (float)
                acc                       : linear target acceleration (0,0,0) for unknown (float)
                attitude_q                : (1 0 0 0 for unknown) (float)
                rates                     : (0 0 0 for unknown) (float)
                position_cov              : eph epv (float)
                custom_state              : button states or switches of a tracker device (uint64_t)

*/
mavlink10.messages.follow_target = function(timestamp, est_capabilities, lat, lon, alt, vel, acc, attitude_q, rates, position_cov, custom_state) {

    this.format = '<QQiif3f3f4f3f3fB';
    this.id = mavlink10.MAVLINK_MSG_ID_FOLLOW_TARGET;
    this.order_map = [0, 10, 2, 3, 4, 5, 6, 7, 8, 9, 1];
    this.crc_extra = 127;
    this.name = 'FOLLOW_TARGET';

    this.fieldnames = ['timestamp', 'est_capabilities', 'lat', 'lon', 'alt', 'vel', 'acc', 'attitude_q', 'rates', 'position_cov', 'custom_state'];


    this.set(arguments);

}
        mavlink10.messages.follow_target.prototype = new mavlink10.message;
mavlink10.messages.follow_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.timestamp, this.custom_state, this.lat, this.lon, this.alt, this.vel, this.acc, this.attitude_q, this.rates, this.position_cov, this.est_capabilities]));
}

/* 
The smoothed, monotonic system state used to feed the control loops of
the system.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                x_acc                     : X acceleration in body frame (float)
                y_acc                     : Y acceleration in body frame (float)
                z_acc                     : Z acceleration in body frame (float)
                x_vel                     : X velocity in body frame (float)
                y_vel                     : Y velocity in body frame (float)
                z_vel                     : Z velocity in body frame (float)
                x_pos                     : X position in local frame (float)
                y_pos                     : Y position in local frame (float)
                z_pos                     : Z position in local frame (float)
                airspeed                  : Airspeed, set to -1 if unknown (float)
                vel_variance              : Variance of body velocity estimate (float)
                pos_variance              : Variance in local position (float)
                q                         : The attitude, represented as Quaternion (float)
                roll_rate                 : Angular rate in roll axis (float)
                pitch_rate                : Angular rate in pitch axis (float)
                yaw_rate                  : Angular rate in yaw axis (float)

*/
mavlink10.messages.control_system_state = function(time_usec, x_acc, y_acc, z_acc, x_vel, y_vel, z_vel, x_pos, y_pos, z_pos, airspeed, vel_variance, pos_variance, q, roll_rate, pitch_rate, yaw_rate) {

    this.format = '<Qffffffffff3f3f4ffff';
    this.id = mavlink10.MAVLINK_MSG_ID_CONTROL_SYSTEM_STATE;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
    this.crc_extra = 103;
    this.name = 'CONTROL_SYSTEM_STATE';

    this.fieldnames = ['time_usec', 'x_acc', 'y_acc', 'z_acc', 'x_vel', 'y_vel', 'z_vel', 'x_pos', 'y_pos', 'z_pos', 'airspeed', 'vel_variance', 'pos_variance', 'q', 'roll_rate', 'pitch_rate', 'yaw_rate'];


    this.set(arguments);

}
        mavlink10.messages.control_system_state.prototype = new mavlink10.message;
mavlink10.messages.control_system_state.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.x_acc, this.y_acc, this.z_acc, this.x_vel, this.y_vel, this.z_vel, this.x_pos, this.y_pos, this.z_pos, this.airspeed, this.vel_variance, this.pos_variance, this.q, this.roll_rate, this.pitch_rate, this.yaw_rate]));
}

/* 
Battery information

                id                        : Battery ID (uint8_t)
                battery_function          : Function of the battery (uint8_t)
                type                      : Type (chemistry) of the battery (uint8_t)
                temperature               : Temperature of the battery. INT16_MAX for unknown temperature. (int16_t)
                voltages                  : Battery voltage of cells. Cells above the valid cell count for this battery should have the UINT16_MAX value. (uint16_t)
                current_battery           : Battery current, -1: autopilot does not measure the current (int16_t)
                current_consumed          : Consumed charge, -1: autopilot does not provide consumption estimate (int32_t)
                energy_consumed           : Consumed energy, -1: autopilot does not provide energy consumption estimate (int32_t)
                battery_remaining         : Remaining battery energy. Values: [0-100], -1: autopilot does not estimate the remaining battery. (int8_t)

*/
mavlink10.messages.battery_status = function(id, battery_function, type, temperature, voltages, current_battery, current_consumed, energy_consumed, battery_remaining) {

    this.format = '<iih10HhBBBb';
    this.id = mavlink10.MAVLINK_MSG_ID_BATTERY_STATUS;
    this.order_map = [5, 6, 7, 2, 3, 4, 0, 1, 8];
    this.crc_extra = 154;
    this.name = 'BATTERY_STATUS';

    this.fieldnames = ['id', 'battery_function', 'type', 'temperature', 'voltages', 'current_battery', 'current_consumed', 'energy_consumed', 'battery_remaining'];


    this.set(arguments);

}
        mavlink10.messages.battery_status.prototype = new mavlink10.message;
mavlink10.messages.battery_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.current_consumed, this.energy_consumed, this.temperature, this.voltages, this.current_battery, this.id, this.battery_function, this.type, this.battery_remaining]));
}

/* 
Version and capability of autopilot software

                capabilities              : Bitmap of capabilities (uint64_t)
                flight_sw_version         : Firmware version number (uint32_t)
                middleware_sw_version        : Middleware version number (uint32_t)
                os_sw_version             : Operating system version number (uint32_t)
                board_version             : HW / board version (last 8 bytes should be silicon ID, if any) (uint32_t)
                flight_custom_version        : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t)
                middleware_custom_version        : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t)
                os_custom_version         : Custom version field, commonly the first 8 bytes of the git hash. This is not an unique identifier, but should allow to identify the commit using the main version number even for very large code bases. (uint8_t)
                vendor_id                 : ID of the board vendor (uint16_t)
                product_id                : ID of the product (uint16_t)
                uid                       : UID if provided by hardware (see uid2) (uint64_t)

*/
mavlink10.messages.autopilot_version = function(capabilities, flight_sw_version, middleware_sw_version, os_sw_version, board_version, flight_custom_version, middleware_custom_version, os_custom_version, vendor_id, product_id, uid) {

    this.format = '<QQIIIIHH8s8s8s';
    this.id = mavlink10.MAVLINK_MSG_ID_AUTOPILOT_VERSION;
    this.order_map = [0, 2, 3, 4, 5, 8, 9, 10, 6, 7, 1];
    this.crc_extra = 178;
    this.name = 'AUTOPILOT_VERSION';

    this.fieldnames = ['capabilities', 'flight_sw_version', 'middleware_sw_version', 'os_sw_version', 'board_version', 'flight_custom_version', 'middleware_custom_version', 'os_custom_version', 'vendor_id', 'product_id', 'uid'];


    this.set(arguments);

}
        mavlink10.messages.autopilot_version.prototype = new mavlink10.message;
mavlink10.messages.autopilot_version.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.capabilities, this.uid, this.flight_sw_version, this.middleware_sw_version, this.os_sw_version, this.board_version, this.vendor_id, this.product_id, this.flight_custom_version, this.middleware_custom_version, this.os_custom_version]));
}

/* 
The location of a landing area captured from a downward facing camera

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                target_num                : The ID of the target if multiple targets are present (uint8_t)
                frame                     : Coordinate frame used for following fields. (uint8_t)
                angle_x                   : X-axis angular offset of the target from the center of the image (float)
                angle_y                   : Y-axis angular offset of the target from the center of the image (float)
                distance                  : Distance to the target from the vehicle (float)
                size_x                    : Size of target along x-axis (float)
                size_y                    : Size of target along y-axis (float)

*/
mavlink10.messages.landing_target = function(time_usec, target_num, frame, angle_x, angle_y, distance, size_x, size_y) {

    this.format = '<QfffffBB';
    this.id = mavlink10.MAVLINK_MSG_ID_LANDING_TARGET;
    this.order_map = [0, 6, 7, 1, 2, 3, 4, 5];
    this.crc_extra = 200;
    this.name = 'LANDING_TARGET';

    this.fieldnames = ['time_usec', 'target_num', 'frame', 'angle_x', 'angle_y', 'distance', 'size_x', 'size_y'];


    this.set(arguments);

}
        mavlink10.messages.landing_target.prototype = new mavlink10.message;
mavlink10.messages.landing_target.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.angle_x, this.angle_y, this.distance, this.size_x, this.size_y, this.target_num, this.frame]));
}

/* 
Estimator status message including flags, innovation test ratios and
estimated accuracies. The flags message is an integer bitmask
containing information on which EKF outputs are valid. See the
ESTIMATOR_STATUS_FLAGS enum definition for further information. The
innovation test ratios show the magnitude of the sensor innovation
divided by the innovation check threshold. Under normal operation the
innovation test ratios should be below 0.5 with occasional values up
to 1.0. Values greater than 1.0 should be rare under normal operation
and indicate that a measurement has been rejected by the filter. The
user should be notified if an innovation test ratio greater than 1.0
is recorded. Notifications for values in the range between 0.5 and 1.0
should be optional and controllable by the user.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                flags                     : Bitmap indicating which EKF outputs are valid. (uint16_t)
                vel_ratio                 : Velocity innovation test ratio (float)
                pos_horiz_ratio           : Horizontal position innovation test ratio (float)
                pos_vert_ratio            : Vertical position innovation test ratio (float)
                mag_ratio                 : Magnetometer innovation test ratio (float)
                hagl_ratio                : Height above terrain innovation test ratio (float)
                tas_ratio                 : True airspeed innovation test ratio (float)
                pos_horiz_accuracy        : Horizontal position 1-STD accuracy relative to the EKF local origin (float)
                pos_vert_accuracy         : Vertical position 1-STD accuracy relative to the EKF local origin (float)

*/
mavlink10.messages.estimator_status = function(time_usec, flags, vel_ratio, pos_horiz_ratio, pos_vert_ratio, mag_ratio, hagl_ratio, tas_ratio, pos_horiz_accuracy, pos_vert_accuracy) {

    this.format = '<QffffffffH';
    this.id = mavlink10.MAVLINK_MSG_ID_ESTIMATOR_STATUS;
    this.order_map = [0, 9, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 163;
    this.name = 'ESTIMATOR_STATUS';

    this.fieldnames = ['time_usec', 'flags', 'vel_ratio', 'pos_horiz_ratio', 'pos_vert_ratio', 'mag_ratio', 'hagl_ratio', 'tas_ratio', 'pos_horiz_accuracy', 'pos_vert_accuracy'];


    this.set(arguments);

}
        mavlink10.messages.estimator_status.prototype = new mavlink10.message;
mavlink10.messages.estimator_status.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.vel_ratio, this.pos_horiz_ratio, this.pos_vert_ratio, this.mag_ratio, this.hagl_ratio, this.tas_ratio, this.pos_horiz_accuracy, this.pos_vert_accuracy, this.flags]));
}

/* 


                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                wind_x                    : Wind in X (NED) direction (float)
                wind_y                    : Wind in Y (NED) direction (float)
                wind_z                    : Wind in Z (NED) direction (float)
                var_horiz                 : Variability of the wind in XY. RMS of a 1 Hz lowpassed wind estimate. (float)
                var_vert                  : Variability of the wind in Z. RMS of a 1 Hz lowpassed wind estimate. (float)
                wind_alt                  : Altitude (AMSL) that this measurement was taken at (float)
                horiz_accuracy            : Horizontal speed 1-STD accuracy (float)
                vert_accuracy             : Vertical speed 1-STD accuracy (float)

*/
mavlink10.messages.wind_cov = function(time_usec, wind_x, wind_y, wind_z, var_horiz, var_vert, wind_alt, horiz_accuracy, vert_accuracy) {

    this.format = '<Qffffffff';
    this.id = mavlink10.MAVLINK_MSG_ID_WIND_COV;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8];
    this.crc_extra = 105;
    this.name = 'WIND_COV';

    this.fieldnames = ['time_usec', 'wind_x', 'wind_y', 'wind_z', 'var_horiz', 'var_vert', 'wind_alt', 'horiz_accuracy', 'vert_accuracy'];


    this.set(arguments);

}
        mavlink10.messages.wind_cov.prototype = new mavlink10.message;
mavlink10.messages.wind_cov.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.wind_x, this.wind_y, this.wind_z, this.var_horiz, this.var_vert, this.wind_alt, this.horiz_accuracy, this.vert_accuracy]));
}

/* 
GPS sensor input message.  This is a raw sensor value sent by the GPS.
This is NOT the global position estimate of the system.

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                gps_id                    : ID of the GPS for multiple GPS inputs (uint8_t)
                ignore_flags              : Bitmap indicating which GPS input flags fields to ignore.  All other fields must be provided. (uint16_t)
                time_week_ms              : GPS time (from start of GPS week) (uint32_t)
                time_week                 : GPS week number (uint16_t)
                fix_type                  : 0-1: no fix, 2: 2D fix, 3: 3D fix. 4: 3D with DGPS. 5: 3D with RTK (uint8_t)
                lat                       : Latitude (WGS84) (int32_t)
                lon                       : Longitude (WGS84) (int32_t)
                alt                       : Altitude (AMSL). Positive for up. (float)
                hdop                      : GPS HDOP horizontal dilution of position (float)
                vdop                      : GPS VDOP vertical dilution of position (float)
                vn                        : GPS velocity in NORTH direction in earth-fixed NED frame (float)
                ve                        : GPS velocity in EAST direction in earth-fixed NED frame (float)
                vd                        : GPS velocity in DOWN direction in earth-fixed NED frame (float)
                speed_accuracy            : GPS speed accuracy (float)
                horiz_accuracy            : GPS horizontal accuracy (float)
                vert_accuracy             : GPS vertical accuracy (float)
                satellites_visible        : Number of satellites visible. (uint8_t)

*/
mavlink10.messages.gps_input = function(time_usec, gps_id, ignore_flags, time_week_ms, time_week, fix_type, lat, lon, alt, hdop, vdop, vn, ve, vd, speed_accuracy, horiz_accuracy, vert_accuracy, satellites_visible) {

    this.format = '<QIiifffffffffHHBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_INPUT;
    this.order_map = [0, 15, 13, 1, 14, 16, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17];
    this.crc_extra = 151;
    this.name = 'GPS_INPUT';

    this.fieldnames = ['time_usec', 'gps_id', 'ignore_flags', 'time_week_ms', 'time_week', 'fix_type', 'lat', 'lon', 'alt', 'hdop', 'vdop', 'vn', 've', 'vd', 'speed_accuracy', 'horiz_accuracy', 'vert_accuracy', 'satellites_visible'];


    this.set(arguments);

}
        mavlink10.messages.gps_input.prototype = new mavlink10.message;
mavlink10.messages.gps_input.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.time_week_ms, this.lat, this.lon, this.alt, this.hdop, this.vdop, this.vn, this.ve, this.vd, this.speed_accuracy, this.horiz_accuracy, this.vert_accuracy, this.ignore_flags, this.time_week, this.gps_id, this.fix_type, this.satellites_visible]));
}

/* 
RTCM message for injecting into the onboard GPS (used for DGPS)

                flags                     : LSB: 1 means message is fragmented, next 2 bits are the fragment ID, the remaining 5 bits are used for the sequence ID. Messages are only to be flushed to the GPS when the entire message has been reconstructed on the autopilot. The fragment ID specifies which order the fragments should be assembled into a buffer, while the sequence ID is used to detect a mismatch between different buffers. The buffer is considered fully reconstructed when either all 4 fragments are present, or all the fragments before the first fragment with a non full payload is received. This management is used to ensure that normal GPS operation doesn't corrupt RTCM data, and to recover from a unreliable transport delivery order. (uint8_t)
                len                       : data length (uint8_t)
                data                      : RTCM message (may be fragmented) (uint8_t)

*/
mavlink10.messages.gps_rtcm_data = function(flags, len, data) {

    this.format = '<BB180s';
    this.id = mavlink10.MAVLINK_MSG_ID_GPS_RTCM_DATA;
    this.order_map = [0, 1, 2];
    this.crc_extra = 35;
    this.name = 'GPS_RTCM_DATA';

    this.fieldnames = ['flags', 'len', 'data'];


    this.set(arguments);

}
        mavlink10.messages.gps_rtcm_data.prototype = new mavlink10.message;
mavlink10.messages.gps_rtcm_data.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.flags, this.len, this.data]));
}

/* 
Message appropriate for high latency connections like Iridium

                base_mode                 : Bitmap of enabled system modes. (uint8_t)
                custom_mode               : A bitfield for use for autopilot-specific flags. (uint32_t)
                landed_state              : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t)
                roll                      : roll (int16_t)
                pitch                     : pitch (int16_t)
                heading                   : heading (uint16_t)
                throttle                  : throttle (percentage) (int8_t)
                heading_sp                : heading setpoint (int16_t)
                latitude                  : Latitude (int32_t)
                longitude                 : Longitude (int32_t)
                altitude_amsl             : Altitude above mean sea level (int16_t)
                altitude_sp               : Altitude setpoint relative to the home position (int16_t)
                airspeed                  : airspeed (uint8_t)
                airspeed_sp               : airspeed setpoint (uint8_t)
                groundspeed               : groundspeed (uint8_t)
                climb_rate                : climb rate (int8_t)
                gps_nsat                  : Number of satellites visible. If unknown, set to 255 (uint8_t)
                gps_fix_type              : GPS Fix type. (uint8_t)
                battery_remaining         : Remaining battery (percentage) (uint8_t)
                temperature               : Autopilot temperature (degrees C) (int8_t)
                temperature_air           : Air temperature (degrees C) from airspeed sensor (int8_t)
                failsafe                  : failsafe (each bit represents a failsafe where 0=ok, 1=failsafe active (bit0:RC, bit1:batt, bit2:GPS, bit3:GCS, bit4:fence) (uint8_t)
                wp_num                    : current waypoint number (uint8_t)
                wp_distance               : distance to target (uint16_t)

*/
mavlink10.messages.high_latency = function(base_mode, custom_mode, landed_state, roll, pitch, heading, throttle, heading_sp, latitude, longitude, altitude_amsl, altitude_sp, airspeed, airspeed_sp, groundspeed, climb_rate, gps_nsat, gps_fix_type, battery_remaining, temperature, temperature_air, failsafe, wp_num, wp_distance) {

    this.format = '<IiihhHhhhHBBbBBBbBBBbbBB';
    this.id = mavlink10.MAVLINK_MSG_ID_HIGH_LATENCY;
    this.order_map = [10, 0, 11, 3, 4, 5, 12, 6, 1, 2, 7, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 9];
    this.crc_extra = 150;
    this.name = 'HIGH_LATENCY';

    this.fieldnames = ['base_mode', 'custom_mode', 'landed_state', 'roll', 'pitch', 'heading', 'throttle', 'heading_sp', 'latitude', 'longitude', 'altitude_amsl', 'altitude_sp', 'airspeed', 'airspeed_sp', 'groundspeed', 'climb_rate', 'gps_nsat', 'gps_fix_type', 'battery_remaining', 'temperature', 'temperature_air', 'failsafe', 'wp_num', 'wp_distance'];


    this.set(arguments);

}
        mavlink10.messages.high_latency.prototype = new mavlink10.message;
mavlink10.messages.high_latency.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.custom_mode, this.latitude, this.longitude, this.roll, this.pitch, this.heading, this.heading_sp, this.altitude_amsl, this.altitude_sp, this.wp_distance, this.base_mode, this.landed_state, this.throttle, this.airspeed, this.airspeed_sp, this.groundspeed, this.climb_rate, this.gps_nsat, this.gps_fix_type, this.battery_remaining, this.temperature, this.temperature_air, this.failsafe, this.wp_num]));
}

/* 
Message appropriate for high latency connections like Iridium (version
2)

                timestamp                 : Timestamp (milliseconds since boot or Unix epoch) (uint32_t)
                type                      : Type of the MAV (quadrotor, helicopter, etc.) (uint8_t)
                autopilot                 : Autopilot type / class. (uint8_t)
                custom_mode               : A bitfield for use for autopilot-specific flags (2 byte version). (uint16_t)
                latitude                  : Latitude (int32_t)
                longitude                 : Longitude (int32_t)
                altitude                  : Altitude above mean sea level (int16_t)
                target_altitude           : Altitude setpoint (int16_t)
                heading                   : Heading (uint8_t)
                target_heading            : Heading setpoint (uint8_t)
                target_distance           : Distance to target waypoint or position (uint16_t)
                throttle                  : Throttle (uint8_t)
                airspeed                  : Airspeed (uint8_t)
                airspeed_sp               : Airspeed setpoint (uint8_t)
                groundspeed               : Groundspeed (uint8_t)
                windspeed                 : Windspeed (uint8_t)
                wind_heading              : Wind heading (uint8_t)
                eph                       : Maximum error horizontal position since last message (uint8_t)
                epv                       : Maximum error vertical position since last message (uint8_t)
                temperature_air           : Air temperature from airspeed sensor (int8_t)
                climb_rate                : Maximum climb rate magnitude since last message (int8_t)
                battery                   : Battery (percentage, -1 for DNU) (int8_t)
                wp_num                    : Current waypoint number (uint16_t)
                failure_flags             : Bitmap of failure flags. (uint16_t)
                custom0                   : Field for custom payload. (int8_t)
                custom1                   : Field for custom payload. (int8_t)
                custom2                   : Field for custom payload. (int8_t)

*/
mavlink10.messages.high_latency2 = function(timestamp, type, autopilot, custom_mode, latitude, longitude, altitude, target_altitude, heading, target_heading, target_distance, throttle, airspeed, airspeed_sp, groundspeed, windspeed, wind_heading, eph, epv, temperature_air, climb_rate, battery, wp_num, failure_flags, custom0, custom1, custom2) {

    this.format = '<IiiHhhHHHBBBBBBBBBBBBbbbbbb';
    this.id = mavlink10.MAVLINK_MSG_ID_HIGH_LATENCY2;
    this.order_map = [0, 9, 10, 3, 1, 2, 4, 5, 11, 12, 6, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 7, 8, 24, 25, 26];
    this.crc_extra = 179;
    this.name = 'HIGH_LATENCY2';

    this.fieldnames = ['timestamp', 'type', 'autopilot', 'custom_mode', 'latitude', 'longitude', 'altitude', 'target_altitude', 'heading', 'target_heading', 'target_distance', 'throttle', 'airspeed', 'airspeed_sp', 'groundspeed', 'windspeed', 'wind_heading', 'eph', 'epv', 'temperature_air', 'climb_rate', 'battery', 'wp_num', 'failure_flags', 'custom0', 'custom1', 'custom2'];


    this.set(arguments);

}
        mavlink10.messages.high_latency2.prototype = new mavlink10.message;
mavlink10.messages.high_latency2.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.timestamp, this.latitude, this.longitude, this.custom_mode, this.altitude, this.target_altitude, this.target_distance, this.wp_num, this.failure_flags, this.type, this.autopilot, this.heading, this.target_heading, this.throttle, this.airspeed, this.airspeed_sp, this.groundspeed, this.windspeed, this.wind_heading, this.eph, this.epv, this.temperature_air, this.climb_rate, this.battery, this.custom0, this.custom1, this.custom2]));
}

/* 
Vibration levels and accelerometer clipping

                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                vibration_x               : Vibration levels on X-axis (float)
                vibration_y               : Vibration levels on Y-axis (float)
                vibration_z               : Vibration levels on Z-axis (float)
                clipping_0                : first accelerometer clipping count (uint32_t)
                clipping_1                : second accelerometer clipping count (uint32_t)
                clipping_2                : third accelerometer clipping count (uint32_t)

*/
mavlink10.messages.vibration = function(time_usec, vibration_x, vibration_y, vibration_z, clipping_0, clipping_1, clipping_2) {

    this.format = '<QfffIII';
    this.id = mavlink10.MAVLINK_MSG_ID_VIBRATION;
    this.order_map = [0, 1, 2, 3, 4, 5, 6];
    this.crc_extra = 90;
    this.name = 'VIBRATION';

    this.fieldnames = ['time_usec', 'vibration_x', 'vibration_y', 'vibration_z', 'clipping_0', 'clipping_1', 'clipping_2'];


    this.set(arguments);

}
        mavlink10.messages.vibration.prototype = new mavlink10.message;
mavlink10.messages.vibration.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.vibration_x, this.vibration_y, this.vibration_z, this.clipping_0, this.clipping_1, this.clipping_2]));
}

/* 
This message can be requested by sending the MAV_CMD_GET_HOME_POSITION
command. The position the system will return to and land on. The
position is set automatically by the system during the takeoff in case
it was not explicitly set by the operator before or after. The
position the system will return to and land on. The global and local
positions encode the position in the respective coordinate frames,
while the q parameter encodes the orientation of the surface. Under
normal conditions it describes the heading and terrain slope, which
can be used by the aircraft to adjust the approach. The approach 3D
vector describes the point to which the system should fly in normal
flight mode and then perform a landing sequence along the vector.

                latitude                  : Latitude (WGS84) (int32_t)
                longitude                 : Longitude (WGS84) (int32_t)
                altitude                  : Altitude (AMSL). Positive for up. (int32_t)
                x                         : Local X position of this position in the local coordinate frame (float)
                y                         : Local Y position of this position in the local coordinate frame (float)
                z                         : Local Z position of this position in the local coordinate frame (float)
                q                         : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float)
                approach_x                : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)
                approach_y                : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)
                approach_z                : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)

*/
mavlink10.messages.home_position = function(latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) {

    this.format = '<iiifff4ffff';
    this.id = mavlink10.MAVLINK_MSG_ID_HOME_POSITION;
    this.order_map = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 104;
    this.name = 'HOME_POSITION';

    this.fieldnames = ['latitude', 'longitude', 'altitude', 'x', 'y', 'z', 'q', 'approach_x', 'approach_y', 'approach_z'];


    this.set(arguments);

}
        mavlink10.messages.home_position.prototype = new mavlink10.message;
mavlink10.messages.home_position.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.latitude, this.longitude, this.altitude, this.x, this.y, this.z, this.q, this.approach_x, this.approach_y, this.approach_z]));
}

/* 
The position the system will return to and land on. The position is
set automatically by the system during the takeoff in case it was not
explicitly set by the operator before or after. The global and local
positions encode the position in the respective coordinate frames,
while the q parameter encodes the orientation of the surface. Under
normal conditions it describes the heading and terrain slope, which
can be used by the aircraft to adjust the approach. The approach 3D
vector describes the point to which the system should fly in normal
flight mode and then perform a landing sequence along the vector.

                target_system             : System ID. (uint8_t)
                latitude                  : Latitude (WGS84) (int32_t)
                longitude                 : Longitude (WGS84) (int32_t)
                altitude                  : Altitude (AMSL). Positive for up. (int32_t)
                x                         : Local X position of this position in the local coordinate frame (float)
                y                         : Local Y position of this position in the local coordinate frame (float)
                z                         : Local Z position of this position in the local coordinate frame (float)
                q                         : World to surface normal and heading transformation of the takeoff position. Used to indicate the heading and slope of the ground (float)
                approach_x                : Local X position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)
                approach_y                : Local Y position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)
                approach_z                : Local Z position of the end of the approach vector. Multicopters should set this position based on their takeoff path. Grass-landing fixed wing aircraft should set it the same way as multicopters. Runway-landing fixed wing aircraft should set it to the opposite direction of the takeoff, assuming the takeoff happened from the threshold / touchdown zone. (float)

*/
mavlink10.messages.set_home_position = function(target_system, latitude, longitude, altitude, x, y, z, q, approach_x, approach_y, approach_z) {

    this.format = '<iiifff4ffffB';
    this.id = mavlink10.MAVLINK_MSG_ID_SET_HOME_POSITION;
    this.order_map = [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    this.crc_extra = 85;
    this.name = 'SET_HOME_POSITION';

    this.fieldnames = ['target_system', 'latitude', 'longitude', 'altitude', 'x', 'y', 'z', 'q', 'approach_x', 'approach_y', 'approach_z'];


    this.set(arguments);

}
        mavlink10.messages.set_home_position.prototype = new mavlink10.message;
mavlink10.messages.set_home_position.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.latitude, this.longitude, this.altitude, this.x, this.y, this.z, this.q, this.approach_x, this.approach_y, this.approach_z, this.target_system]));
}

/* 
The interval between messages for a particular MAVLink message ID.
This interface replaces DATA_STREAM

                message_id                : The ID of the requested MAVLink message. v1.0 is limited to 254 messages. (uint16_t)
                interval_us               : The interval between two messages. A value of -1 indicates this stream is disabled, 0 indicates it is not available, > 0 indicates the interval at which it is sent. (int32_t)

*/
mavlink10.messages.message_interval = function(message_id, interval_us) {

    this.format = '<iH';
    this.id = mavlink10.MAVLINK_MSG_ID_MESSAGE_INTERVAL;
    this.order_map = [1, 0];
    this.crc_extra = 95;
    this.name = 'MESSAGE_INTERVAL';

    this.fieldnames = ['message_id', 'interval_us'];


    this.set(arguments);

}
        mavlink10.messages.message_interval.prototype = new mavlink10.message;
mavlink10.messages.message_interval.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.interval_us, this.message_id]));
}

/* 
Provides state for additional features

                vtol_state                : The VTOL state if applicable. Is set to MAV_VTOL_STATE_UNDEFINED if UAV is not in VTOL configuration. (uint8_t)
                landed_state              : The landed state. Is set to MAV_LANDED_STATE_UNDEFINED if landed state is unknown. (uint8_t)

*/
mavlink10.messages.extended_sys_state = function(vtol_state, landed_state) {

    this.format = '<BB';
    this.id = mavlink10.MAVLINK_MSG_ID_EXTENDED_SYS_STATE;
    this.order_map = [0, 1];
    this.crc_extra = 130;
    this.name = 'EXTENDED_SYS_STATE';

    this.fieldnames = ['vtol_state', 'landed_state'];


    this.set(arguments);

}
        mavlink10.messages.extended_sys_state.prototype = new mavlink10.message;
mavlink10.messages.extended_sys_state.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.vtol_state, this.landed_state]));
}

/* 
The location and information of an ADSB vehicle

                ICAO_address              : ICAO address (uint32_t)
                lat                       : Latitude (int32_t)
                lon                       : Longitude (int32_t)
                altitude_type             : ADSB altitude type. (uint8_t)
                altitude                  : Altitude(ASL) (int32_t)
                heading                   : Course over ground (uint16_t)
                hor_velocity              : The horizontal velocity (uint16_t)
                ver_velocity              : The vertical velocity. Positive is up (int16_t)
                callsign                  : The callsign, 8+null (char)
                emitter_type              : ADSB emitter type. (uint8_t)
                tslc                      : Time since last communication in seconds (uint8_t)
                flags                     : Bitmap to indicate various statuses including valid data fields (uint16_t)
                squawk                    : Squawk code (uint16_t)

*/
mavlink10.messages.adsb_vehicle = function(ICAO_address, lat, lon, altitude_type, altitude, heading, hor_velocity, ver_velocity, callsign, emitter_type, tslc, flags, squawk) {

    this.format = '<IiiiHHhHHB9sBB';
    this.id = mavlink10.MAVLINK_MSG_ID_ADSB_VEHICLE;
    this.order_map = [0, 1, 2, 9, 3, 4, 5, 6, 10, 11, 12, 7, 8];
    this.crc_extra = 184;
    this.name = 'ADSB_VEHICLE';

    this.fieldnames = ['ICAO_address', 'lat', 'lon', 'altitude_type', 'altitude', 'heading', 'hor_velocity', 'ver_velocity', 'callsign', 'emitter_type', 'tslc', 'flags', 'squawk'];


    this.set(arguments);

}
        mavlink10.messages.adsb_vehicle.prototype = new mavlink10.message;
mavlink10.messages.adsb_vehicle.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.ICAO_address, this.lat, this.lon, this.altitude, this.heading, this.hor_velocity, this.ver_velocity, this.flags, this.squawk, this.altitude_type, this.callsign, this.emitter_type, this.tslc]));
}

/* 
Information about a potential collision

                src                       : Collision data source (uint8_t)
                id                        : Unique identifier, domain based on src field (uint32_t)
                action                    : Action that is being taken to avoid this collision (uint8_t)
                threat_level              : How concerned the aircraft is about this collision (uint8_t)
                time_to_minimum_delta        : Estimated time until collision occurs (float)
                altitude_minimum_delta        : Closest vertical distance between vehicle and object (float)
                horizontal_minimum_delta        : Closest horizontal distance between vehicle and object (float)

*/
mavlink10.messages.collision = function(src, id, action, threat_level, time_to_minimum_delta, altitude_minimum_delta, horizontal_minimum_delta) {

    this.format = '<IfffBBB';
    this.id = mavlink10.MAVLINK_MSG_ID_COLLISION;
    this.order_map = [4, 0, 5, 6, 1, 2, 3];
    this.crc_extra = 81;
    this.name = 'COLLISION';

    this.fieldnames = ['src', 'id', 'action', 'threat_level', 'time_to_minimum_delta', 'altitude_minimum_delta', 'horizontal_minimum_delta'];


    this.set(arguments);

}
        mavlink10.messages.collision.prototype = new mavlink10.message;
mavlink10.messages.collision.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.id, this.time_to_minimum_delta, this.altitude_minimum_delta, this.horizontal_minimum_delta, this.src, this.action, this.threat_level]));
}

/* 
Message implementing parts of the V2 payload specs in V1 frames for
transitional support.

                target_network            : Network ID (0 for broadcast) (uint8_t)
                target_system             : System ID (0 for broadcast) (uint8_t)
                target_component          : Component ID (0 for broadcast) (uint8_t)
                message_type              : A code that identifies the software component that understands this message (analogous to USB device classes or mime type strings).  If this code is less than 32768, it is considered a 'registered' protocol extension and the corresponding entry should be added to https://github.com/mavlink/mavlink/extension-message-ids.xml.  Software creators can register blocks of message IDs as needed (useful for GCS specific metadata, etc...). Message_types greater than 32767 are considered local experiments and should not be checked in to any widely distributed codebase. (uint16_t)
                payload                   : Variable length payload. The length is defined by the remaining message length when subtracting the header and other fields.  The entire content of this block is opaque unless you understand any the encoding message_type.  The particular encoding used can be extension specific and might not always be documented as part of the mavlink specification. (uint8_t)

*/
mavlink10.messages.v2_extension = function(target_network, target_system, target_component, message_type, payload) {

    this.format = '<HBBB249s';
    this.id = mavlink10.MAVLINK_MSG_ID_V2_EXTENSION;
    this.order_map = [1, 2, 3, 0, 4];
    this.crc_extra = 8;
    this.name = 'V2_EXTENSION';

    this.fieldnames = ['target_network', 'target_system', 'target_component', 'message_type', 'payload'];


    this.set(arguments);

}
        mavlink10.messages.v2_extension.prototype = new mavlink10.message;
mavlink10.messages.v2_extension.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.message_type, this.target_network, this.target_system, this.target_component, this.payload]));
}

/* 
Send raw controller memory. The use of this message is discouraged for
normal packets, but a quite efficient way for testing new messages and
getting experimental debug output.

                address                   : Starting address of the debug variables (uint16_t)
                ver                       : Version code of the type variable. 0=unknown, type ignored and assumed int16_t. 1=as below (uint8_t)
                type                      : Type code of the memory variables. for ver = 1: 0=16 x int16_t, 1=16 x uint16_t, 2=16 x Q15, 3=16 x 1Q14 (uint8_t)
                value                     : Memory contents at specified address (int8_t)

*/
mavlink10.messages.memory_vect = function(address, ver, type, value) {

    this.format = '<HBB32s';
    this.id = mavlink10.MAVLINK_MSG_ID_MEMORY_VECT;
    this.order_map = [0, 1, 2, 3];
    this.crc_extra = 204;
    this.name = 'MEMORY_VECT';

    this.fieldnames = ['address', 'ver', 'type', 'value'];


    this.set(arguments);

}
        mavlink10.messages.memory_vect.prototype = new mavlink10.message;
mavlink10.messages.memory_vect.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.address, this.ver, this.type, this.value]));
}

/* 
To debug something using a named 3D vector.

                name                      : Name (char)
                time_usec                 : Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude the number. (uint64_t)
                x                         : x (float)
                y                         : y (float)
                z                         : z (float)

*/
mavlink10.messages.debug_vect = function(name, time_usec, x, y, z) {

    this.format = '<Qfff10s';
    this.id = mavlink10.MAVLINK_MSG_ID_DEBUG_VECT;
    this.order_map = [4, 0, 1, 2, 3];
    this.crc_extra = 49;
    this.name = 'DEBUG_VECT';

    this.fieldnames = ['name', 'time_usec', 'x', 'y', 'z'];


    this.set(arguments);

}
        mavlink10.messages.debug_vect.prototype = new mavlink10.message;
mavlink10.messages.debug_vect.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_usec, this.x, this.y, this.z, this.name]));
}

/* 
Send a key-value pair as float. The use of this message is discouraged
for normal packets, but a quite efficient way for testing new messages
and getting experimental debug output.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                name                      : Name of the debug variable (char)
                value                     : Floating point value (float)

*/
mavlink10.messages.named_value_float = function(time_boot_ms, name, value) {

    this.format = '<If10s';
    this.id = mavlink10.MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
    this.order_map = [0, 2, 1];
    this.crc_extra = 170;
    this.name = 'NAMED_VALUE_FLOAT';

    this.fieldnames = ['time_boot_ms', 'name', 'value'];


    this.set(arguments);

}
        mavlink10.messages.named_value_float.prototype = new mavlink10.message;
mavlink10.messages.named_value_float.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.value, this.name]));
}

/* 
Send a key-value pair as integer. The use of this message is
discouraged for normal packets, but a quite efficient way for testing
new messages and getting experimental debug output.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                name                      : Name of the debug variable (char)
                value                     : Signed integer value (int32_t)

*/
mavlink10.messages.named_value_int = function(time_boot_ms, name, value) {

    this.format = '<Ii10s';
    this.id = mavlink10.MAVLINK_MSG_ID_NAMED_VALUE_INT;
    this.order_map = [0, 2, 1];
    this.crc_extra = 44;
    this.name = 'NAMED_VALUE_INT';

    this.fieldnames = ['time_boot_ms', 'name', 'value'];


    this.set(arguments);

}
        mavlink10.messages.named_value_int.prototype = new mavlink10.message;
mavlink10.messages.named_value_int.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.value, this.name]));
}

/* 
Status text message. These messages are printed in yellow in the COMM
console of QGroundControl. WARNING: They consume quite some bandwidth,
so use only for important status and error messages. If implemented
wisely, these messages are buffered on the MCU and sent only at a
limited rate (e.g. 10 Hz).

                severity                  : Severity of status. Relies on the definitions within RFC-5424. (uint8_t)
                text                      : Status text message, without null termination character (char)

*/
mavlink10.messages.statustext = function(severity, text) {

    this.format = '<B50s';
    this.id = mavlink10.MAVLINK_MSG_ID_STATUSTEXT;
    this.order_map = [0, 1];
    this.crc_extra = 83;
    this.name = 'STATUSTEXT';

    this.fieldnames = ['severity', 'text'];


    this.set(arguments);

}
        mavlink10.messages.statustext.prototype = new mavlink10.message;
mavlink10.messages.statustext.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.severity, this.text]));
}

/* 
Send a debug value. The index is used to discriminate between values.
These values show up in the plot of QGroundControl as DEBUG N.

                time_boot_ms              : Timestamp (time since system boot). (uint32_t)
                ind                       : index of debug variable (uint8_t)
                value                     : DEBUG value (float)

*/
mavlink10.messages.debug = function(time_boot_ms, ind, value) {

    this.format = '<IfB';
    this.id = mavlink10.MAVLINK_MSG_ID_DEBUG;
    this.order_map = [0, 2, 1];
    this.crc_extra = 46;
    this.name = 'DEBUG';

    this.fieldnames = ['time_boot_ms', 'ind', 'value'];


    this.set(arguments);

}
        mavlink10.messages.debug.prototype = new mavlink10.message;
mavlink10.messages.debug.prototype.pack = function(mav) {
    return mavlink10.message.prototype.pack.call(this, mav, this.crc_extra, jspack.Pack(this.format, [ this.time_boot_ms, this.value, this.ind]));
}


mavlink10.map = {
        200: { format: '<ifffhhhhhh10HB', type: mavlink10.messages.node_realtime_info, order_map: [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 161 },
        201: { format: '<ihhhhhhhhB', type: mavlink10.messages.node_relative_fused, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 236 },
        202: { format: '<iiiiiiiiiiibB', type: mavlink10.messages.swarm_remote_command, order_map: [0, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 125 },
        203: { format: '<qiiffffffff', type: mavlink10.messages.node_detected, order_map: [1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 80 },
        204: { format: '<ifffffffBBBBBBBB', type: mavlink10.messages.drone_status, order_map: [0, 8, 9, 10, 11, 12, 13, 14, 15, 1, 2, 3, 4, 5, 6, 7], crc_extra: 80 },
        205: { format: '<ihhhhhhhhhhb', type: mavlink10.messages.drone_odom_gt, order_map: [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 225 },
        206: { format: '<ihhhhb', type: mavlink10.messages.drone_pose_gt, order_map: [0, 5, 1, 2, 3, 4], crc_extra: 241 },
        207: { format: '<ihhhhhhhhB', type: mavlink10.messages.node_local_fused, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 225 },
        208: { format: '<ihhhhhhhhB', type: mavlink10.messages.node_based_fused, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 216 },
        0: { format: '<IBBBBB', type: mavlink10.messages.heartbeat, order_map: [1, 2, 3, 0, 4, 5], crc_extra: 50 },
        1: { format: '<IIIHHhHHHHHHb', type: mavlink10.messages.sys_status, order_map: [0, 1, 2, 3, 4, 5, 12, 6, 7, 8, 9, 10, 11], crc_extra: 124 },
        2: { format: '<QI', type: mavlink10.messages.system_time, order_map: [0, 1], crc_extra: 137 },
        4: { format: '<QIBB', type: mavlink10.messages.ping, order_map: [0, 1, 2, 3], crc_extra: 237 },
        5: { format: '<BBB25s', type: mavlink10.messages.change_operator_control, order_map: [0, 1, 2, 3], crc_extra: 217 },
        6: { format: '<BBB', type: mavlink10.messages.change_operator_control_ack, order_map: [0, 1, 2], crc_extra: 104 },
        7: { format: '<32s', type: mavlink10.messages.auth_key, order_map: [0], crc_extra: 119 },
        11: { format: '<IBB', type: mavlink10.messages.set_mode, order_map: [1, 2, 0], crc_extra: 89 },
        20: { format: '<hBB16s', type: mavlink10.messages.param_request_read, order_map: [1, 2, 3, 0], crc_extra: 214 },
        21: { format: '<BB', type: mavlink10.messages.param_request_list, order_map: [0, 1], crc_extra: 159 },
        22: { format: '<fHH16sB', type: mavlink10.messages.param_value, order_map: [3, 0, 4, 1, 2], crc_extra: 220 },
        23: { format: '<fBB16sB', type: mavlink10.messages.param_set, order_map: [1, 2, 3, 0, 4], crc_extra: 168 },
        24: { format: '<QiiiHHHHBB', type: mavlink10.messages.gps_raw_int, order_map: [0, 8, 1, 2, 3, 4, 5, 6, 7, 9], crc_extra: 24 },
        25: { format: '<B20s20s20s20s20s', type: mavlink10.messages.gps_status, order_map: [0, 1, 2, 3, 4, 5], crc_extra: 23 },
        26: { format: '<Ihhhhhhhhh', type: mavlink10.messages.scaled_imu, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 170 },
        27: { format: '<Qhhhhhhhhh', type: mavlink10.messages.raw_imu, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 144 },
        28: { format: '<Qhhhh', type: mavlink10.messages.raw_pressure, order_map: [0, 1, 2, 3, 4], crc_extra: 67 },
        29: { format: '<Iffh', type: mavlink10.messages.scaled_pressure, order_map: [0, 1, 2, 3], crc_extra: 115 },
        30: { format: '<Iffffff', type: mavlink10.messages.attitude, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 39 },
        31: { format: '<Ifffffff', type: mavlink10.messages.attitude_quaternion, order_map: [0, 1, 2, 3, 4, 5, 6, 7], crc_extra: 246 },
        32: { format: '<Iffffff', type: mavlink10.messages.local_position_ned, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 185 },
        33: { format: '<IiiiihhhH', type: mavlink10.messages.global_position_int, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 104 },
        34: { format: '<IhhhhhhhhBB', type: mavlink10.messages.rc_channels_scaled, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 10], crc_extra: 237 },
        35: { format: '<IHHHHHHHHBB', type: mavlink10.messages.rc_channels_raw, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8, 10], crc_extra: 244 },
        36: { format: '<IHHHHHHHHB', type: mavlink10.messages.servo_output_raw, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 222 },
        37: { format: '<hhBB', type: mavlink10.messages.mission_request_partial_list, order_map: [2, 3, 0, 1], crc_extra: 212 },
        38: { format: '<hhBB', type: mavlink10.messages.mission_write_partial_list, order_map: [2, 3, 0, 1], crc_extra: 9 },
        39: { format: '<fffffffHHBBBBB', type: mavlink10.messages.mission_item, order_map: [9, 10, 7, 11, 8, 12, 13, 0, 1, 2, 3, 4, 5, 6], crc_extra: 254 },
        40: { format: '<HBB', type: mavlink10.messages.mission_request, order_map: [1, 2, 0], crc_extra: 230 },
        41: { format: '<HBB', type: mavlink10.messages.mission_set_current, order_map: [1, 2, 0], crc_extra: 28 },
        42: { format: '<H', type: mavlink10.messages.mission_current, order_map: [0], crc_extra: 28 },
        43: { format: '<BB', type: mavlink10.messages.mission_request_list, order_map: [0, 1], crc_extra: 132 },
        44: { format: '<HBB', type: mavlink10.messages.mission_count, order_map: [1, 2, 0], crc_extra: 221 },
        45: { format: '<BB', type: mavlink10.messages.mission_clear_all, order_map: [0, 1], crc_extra: 232 },
        46: { format: '<H', type: mavlink10.messages.mission_item_reached, order_map: [0], crc_extra: 11 },
        47: { format: '<BBB', type: mavlink10.messages.mission_ack, order_map: [0, 1, 2], crc_extra: 153 },
        48: { format: '<iiiB', type: mavlink10.messages.set_gps_global_origin, order_map: [3, 0, 1, 2], crc_extra: 41 },
        49: { format: '<iii', type: mavlink10.messages.gps_global_origin, order_map: [0, 1, 2], crc_extra: 39 },
        50: { format: '<ffffhBB16sB', type: mavlink10.messages.param_map_rc, order_map: [5, 6, 7, 4, 8, 0, 1, 2, 3], crc_extra: 78 },
        51: { format: '<HBB', type: mavlink10.messages.mission_request_int, order_map: [1, 2, 0], crc_extra: 196 },
        54: { format: '<ffffffBBB', type: mavlink10.messages.safety_set_allowed_area, order_map: [6, 7, 8, 0, 1, 2, 3, 4, 5], crc_extra: 15 },
        55: { format: '<ffffffB', type: mavlink10.messages.safety_allowed_area, order_map: [6, 0, 1, 2, 3, 4, 5], crc_extra: 3 },
        61: { format: '<Q4ffff9f', type: mavlink10.messages.attitude_quaternion_cov, order_map: [0, 1, 2, 3, 4, 5], crc_extra: 167 },
        62: { format: '<fffffhhH', type: mavlink10.messages.nav_controller_output, order_map: [0, 1, 5, 6, 7, 2, 3, 4], crc_extra: 183 },
        63: { format: '<Qiiiifff36fB', type: mavlink10.messages.global_position_int_cov, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 119 },
        64: { format: '<Qfffffffff45fB', type: mavlink10.messages.local_position_ned_cov, order_map: [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 191 },
        65: { format: '<IHHHHHHHHHHHHHHHHHHBB', type: mavlink10.messages.rc_channels, order_map: [0, 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20], crc_extra: 118 },
        66: { format: '<HBBBB', type: mavlink10.messages.request_data_stream, order_map: [1, 2, 3, 0, 4], crc_extra: 148 },
        67: { format: '<HBB', type: mavlink10.messages.data_stream, order_map: [1, 0, 2], crc_extra: 21 },
        69: { format: '<hhhhHB', type: mavlink10.messages.manual_control, order_map: [5, 0, 1, 2, 3, 4], crc_extra: 243 },
        70: { format: '<HHHHHHHHBB', type: mavlink10.messages.rc_channels_override, order_map: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7], crc_extra: 124 },
        73: { format: '<ffffiifHHBBBBB', type: mavlink10.messages.mission_item_int, order_map: [9, 10, 7, 11, 8, 12, 13, 0, 1, 2, 3, 4, 5, 6], crc_extra: 38 },
        74: { format: '<ffffhH', type: mavlink10.messages.vfr_hud, order_map: [0, 1, 4, 5, 2, 3], crc_extra: 20 },
        75: { format: '<ffffiifHBBBBB', type: mavlink10.messages.command_int, order_map: [8, 9, 10, 7, 11, 12, 0, 1, 2, 3, 4, 5, 6], crc_extra: 158 },
        76: { format: '<fffffffHBBB', type: mavlink10.messages.command_long, order_map: [8, 9, 7, 10, 0, 1, 2, 3, 4, 5, 6], crc_extra: 152 },
        77: { format: '<HB', type: mavlink10.messages.command_ack, order_map: [0, 1], crc_extra: 143 },
        81: { format: '<IffffBB', type: mavlink10.messages.manual_setpoint, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 106 },
        82: { format: '<I4fffffBBB', type: mavlink10.messages.set_attitude_target, order_map: [0, 6, 7, 8, 1, 2, 3, 4, 5], crc_extra: 49 },
        83: { format: '<I4fffffB', type: mavlink10.messages.attitude_target, order_map: [0, 6, 1, 2, 3, 4, 5], crc_extra: 22 },
        84: { format: '<IfffffffffffHBBB', type: mavlink10.messages.set_position_target_local_ned, order_map: [0, 13, 14, 15, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], crc_extra: 143 },
        85: { format: '<IfffffffffffHB', type: mavlink10.messages.position_target_local_ned, order_map: [0, 13, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], crc_extra: 140 },
        86: { format: '<IiifffffffffHBBB', type: mavlink10.messages.set_position_target_global_int, order_map: [0, 13, 14, 15, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], crc_extra: 5 },
        87: { format: '<IiifffffffffHB', type: mavlink10.messages.position_target_global_int, order_map: [0, 13, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], crc_extra: 150 },
        89: { format: '<Iffffff', type: mavlink10.messages.local_position_ned_system_global_offset, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 231 },
        90: { format: '<Qffffffiiihhhhhh', type: mavlink10.messages.hil_state, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], crc_extra: 183 },
        91: { format: '<QffffffffBB', type: mavlink10.messages.hil_controls, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], crc_extra: 63 },
        92: { format: '<QHHHHHHHHHHHHB', type: mavlink10.messages.hil_rc_inputs_raw, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], crc_extra: 54 },
        93: { format: '<QQ16fB', type: mavlink10.messages.hil_actuator_controls, order_map: [0, 2, 3, 1], crc_extra: 47 },
        100: { format: '<QfffhhBB', type: mavlink10.messages.optical_flow, order_map: [0, 6, 4, 5, 1, 2, 7, 3], crc_extra: 175 },
        101: { format: '<Qffffff', type: mavlink10.messages.global_vision_position_estimate, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 102 },
        102: { format: '<Qffffff', type: mavlink10.messages.vision_position_estimate, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 158 },
        103: { format: '<Qfff', type: mavlink10.messages.vision_speed_estimate, order_map: [0, 1, 2, 3], crc_extra: 208 },
        104: { format: '<Qffffff', type: mavlink10.messages.vicon_position_estimate, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 56 },
        105: { format: '<QfffffffffffffH', type: mavlink10.messages.highres_imu, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], crc_extra: 93 },
        106: { format: '<QIfffffIfhBB', type: mavlink10.messages.optical_flow_rad, order_map: [0, 10, 1, 2, 3, 4, 5, 6, 9, 11, 7, 8], crc_extra: 138 },
        107: { format: '<QfffffffffffffI', type: mavlink10.messages.hil_sensor, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], crc_extra: 108 },
        108: { format: '<fffffffffffffffffffff', type: mavlink10.messages.sim_state, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], crc_extra: 32 },
        109: { format: '<HHBBBBB', type: mavlink10.messages.radio_status, order_map: [2, 3, 4, 5, 6, 0, 1], crc_extra: 185 },
        110: { format: '<BBB251s', type: mavlink10.messages.file_transfer_protocol, order_map: [0, 1, 2, 3], crc_extra: 84 },
        111: { format: '<qq', type: mavlink10.messages.timesync, order_map: [0, 1], crc_extra: 34 },
        112: { format: '<QI', type: mavlink10.messages.camera_trigger, order_map: [0, 1], crc_extra: 174 },
        113: { format: '<QiiiHHHhhhHBB', type: mavlink10.messages.hil_gps, order_map: [0, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12], crc_extra: 124 },
        114: { format: '<QIfffffIfhBB', type: mavlink10.messages.hil_optical_flow, order_map: [0, 10, 1, 2, 3, 4, 5, 6, 9, 11, 7, 8], crc_extra: 237 },
        115: { format: '<Q4ffffiiihhhHHhhh', type: mavlink10.messages.hil_state_quaternion, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], crc_extra: 4 },
        116: { format: '<Ihhhhhhhhh', type: mavlink10.messages.scaled_imu2, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 76 },
        117: { format: '<HHBB', type: mavlink10.messages.log_request_list, order_map: [2, 3, 0, 1], crc_extra: 128 },
        118: { format: '<IIHHH', type: mavlink10.messages.log_entry, order_map: [2, 3, 4, 0, 1], crc_extra: 56 },
        119: { format: '<IIHBB', type: mavlink10.messages.log_request_data, order_map: [3, 4, 2, 0, 1], crc_extra: 116 },
        120: { format: '<IHB90s', type: mavlink10.messages.log_data, order_map: [1, 0, 2, 3], crc_extra: 134 },
        121: { format: '<BB', type: mavlink10.messages.log_erase, order_map: [0, 1], crc_extra: 237 },
        122: { format: '<BB', type: mavlink10.messages.log_request_end, order_map: [0, 1], crc_extra: 203 },
        123: { format: '<BBB110s', type: mavlink10.messages.gps_inject_data, order_map: [0, 1, 2, 3], crc_extra: 250 },
        124: { format: '<QiiiIHHHHBBB', type: mavlink10.messages.gps2_raw, order_map: [0, 9, 1, 2, 3, 5, 6, 7, 8, 10, 11, 4], crc_extra: 87 },
        125: { format: '<HHH', type: mavlink10.messages.power_status, order_map: [0, 1, 2], crc_extra: 203 },
        126: { format: '<IHBBB70s', type: mavlink10.messages.serial_control, order_map: [2, 3, 1, 0, 4, 5], crc_extra: 220 },
        127: { format: '<IIiiiIiHBBBBB', type: mavlink10.messages.gps_rtk, order_map: [0, 8, 7, 1, 9, 10, 11, 12, 2, 3, 4, 5, 6], crc_extra: 25 },
        128: { format: '<IIiiiIiHBBBBB', type: mavlink10.messages.gps2_rtk, order_map: [0, 8, 7, 1, 9, 10, 11, 12, 2, 3, 4, 5, 6], crc_extra: 226 },
        129: { format: '<Ihhhhhhhhh', type: mavlink10.messages.scaled_imu3, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 46 },
        130: { format: '<IHHHBBB', type: mavlink10.messages.data_transmission_handshake, order_map: [4, 0, 1, 2, 3, 5, 6], crc_extra: 29 },
        131: { format: '<H253s', type: mavlink10.messages.encapsulated_data, order_map: [0, 1], crc_extra: 223 },
        132: { format: '<IHHHBBBB', type: mavlink10.messages.distance_sensor, order_map: [0, 1, 2, 3, 4, 5, 6, 7], crc_extra: 85 },
        133: { format: '<QiiH', type: mavlink10.messages.terrain_request, order_map: [1, 2, 3, 0], crc_extra: 6 },
        134: { format: '<iiH16hB', type: mavlink10.messages.terrain_data, order_map: [0, 1, 2, 4, 3], crc_extra: 229 },
        135: { format: '<ii', type: mavlink10.messages.terrain_check, order_map: [0, 1], crc_extra: 203 },
        136: { format: '<iiffHHH', type: mavlink10.messages.terrain_report, order_map: [0, 1, 4, 2, 3, 5, 6], crc_extra: 1 },
        137: { format: '<Iffh', type: mavlink10.messages.scaled_pressure2, order_map: [0, 1, 2, 3], crc_extra: 195 },
        138: { format: '<Q4ffff', type: mavlink10.messages.att_pos_mocap, order_map: [0, 1, 2, 3, 4], crc_extra: 109 },
        139: { format: '<Q8fBBB', type: mavlink10.messages.set_actuator_control_target, order_map: [0, 2, 3, 4, 1], crc_extra: 168 },
        140: { format: '<Q8fB', type: mavlink10.messages.actuator_control_target, order_map: [0, 2, 1], crc_extra: 181 },
        141: { format: '<Qffffff', type: mavlink10.messages.altitude, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 47 },
        142: { format: '<BB120sB120s', type: mavlink10.messages.resource_request, order_map: [0, 1, 2, 3, 4], crc_extra: 72 },
        143: { format: '<Iffh', type: mavlink10.messages.scaled_pressure3, order_map: [0, 1, 2, 3], crc_extra: 131 },
        144: { format: '<QQiif3f3f4f3f3fB', type: mavlink10.messages.follow_target, order_map: [0, 10, 2, 3, 4, 5, 6, 7, 8, 9, 1], crc_extra: 127 },
        146: { format: '<Qffffffffff3f3f4ffff', type: mavlink10.messages.control_system_state, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], crc_extra: 103 },
        147: { format: '<iih10HhBBBb', type: mavlink10.messages.battery_status, order_map: [5, 6, 7, 2, 3, 4, 0, 1, 8], crc_extra: 154 },
        148: { format: '<QQIIIIHH8s8s8s', type: mavlink10.messages.autopilot_version, order_map: [0, 2, 3, 4, 5, 8, 9, 10, 6, 7, 1], crc_extra: 178 },
        149: { format: '<QfffffBB', type: mavlink10.messages.landing_target, order_map: [0, 6, 7, 1, 2, 3, 4, 5], crc_extra: 200 },
        230: { format: '<QffffffffH', type: mavlink10.messages.estimator_status, order_map: [0, 9, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 163 },
        231: { format: '<Qffffffff', type: mavlink10.messages.wind_cov, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8], crc_extra: 105 },
        232: { format: '<QIiifffffffffHHBBB', type: mavlink10.messages.gps_input, order_map: [0, 15, 13, 1, 14, 16, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 17], crc_extra: 151 },
        233: { format: '<BB180s', type: mavlink10.messages.gps_rtcm_data, order_map: [0, 1, 2], crc_extra: 35 },
        234: { format: '<IiihhHhhhHBBbBBBbBBBbbBB', type: mavlink10.messages.high_latency, order_map: [10, 0, 11, 3, 4, 5, 12, 6, 1, 2, 7, 8, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 9], crc_extra: 150 },
        235: { format: '<IiiHhhHHHBBBBBBBBBBBBbbbbbb', type: mavlink10.messages.high_latency2, order_map: [0, 9, 10, 3, 1, 2, 4, 5, 11, 12, 6, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 7, 8, 24, 25, 26], crc_extra: 179 },
        241: { format: '<QfffIII', type: mavlink10.messages.vibration, order_map: [0, 1, 2, 3, 4, 5, 6], crc_extra: 90 },
        242: { format: '<iiifff4ffff', type: mavlink10.messages.home_position, order_map: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 104 },
        243: { format: '<iiifff4ffffB', type: mavlink10.messages.set_home_position, order_map: [10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9], crc_extra: 85 },
        244: { format: '<iH', type: mavlink10.messages.message_interval, order_map: [1, 0], crc_extra: 95 },
        245: { format: '<BB', type: mavlink10.messages.extended_sys_state, order_map: [0, 1], crc_extra: 130 },
        246: { format: '<IiiiHHhHHB9sBB', type: mavlink10.messages.adsb_vehicle, order_map: [0, 1, 2, 9, 3, 4, 5, 6, 10, 11, 12, 7, 8], crc_extra: 184 },
        247: { format: '<IfffBBB', type: mavlink10.messages.collision, order_map: [4, 0, 5, 6, 1, 2, 3], crc_extra: 81 },
        248: { format: '<HBBB249s', type: mavlink10.messages.v2_extension, order_map: [1, 2, 3, 0, 4], crc_extra: 8 },
        249: { format: '<HBB32s', type: mavlink10.messages.memory_vect, order_map: [0, 1, 2, 3], crc_extra: 204 },
        250: { format: '<Qfff10s', type: mavlink10.messages.debug_vect, order_map: [4, 0, 1, 2, 3], crc_extra: 49 },
        251: { format: '<If10s', type: mavlink10.messages.named_value_float, order_map: [0, 2, 1], crc_extra: 170 },
        252: { format: '<Ii10s', type: mavlink10.messages.named_value_int, order_map: [0, 2, 1], crc_extra: 44 },
        253: { format: '<B50s', type: mavlink10.messages.statustext, order_map: [0, 1], crc_extra: 83 },
        254: { format: '<IfB', type: mavlink10.messages.debug, order_map: [0, 2, 1], crc_extra: 46 },
}


// Special mavlink message to capture malformed data packets for debugging
mavlink10.messages.bad_data = function(data, reason) {
    this.id = mavlink10.MAVLINK_MSG_ID_BAD_DATA;
    this.data = data;
    this.reason = reason;
    this.msgbuf = data;
}

/* MAVLink protocol handling class */
MAVLink10Processor = function(logger, srcSystem, srcComponent) {

    this.logger = logger;

    this.seq = 0;
    this.buf = new Buffer.from([]);
    this.bufInError = new Buffer.from([]);
   
    this.srcSystem = (typeof srcSystem === 'undefined') ? 0 : srcSystem;
    this.srcComponent =  (typeof srcComponent === 'undefined') ? 0 : srcComponent;

    this.have_prefix_error = false;

    // The first packet we expect is a valid header, 6 bytes.
    this.protocol_marker = 254;   
    this.expected_length = mavlink10.HEADER_LEN;
    this.little_endian = true;

    this.crc_extra = true;
    this.sort_fields = true;
    this.total_packets_sent = 0;
    this.total_bytes_sent = 0;
    this.total_packets_received = 0;
    this.total_bytes_received = 0;
    this.total_receive_errors = 0;
    this.startup_time = Date.now();
    
}

// Implements EventEmitter
util.inherits(MAVLink10Processor, events.EventEmitter);

// If the logger exists, this function will add a message to it.
// Assumes the logger is a winston object.
MAVLink10Processor.prototype.log = function(message) {
    if(this.logger) {
        this.logger.info(message);
    }
}

MAVLink10Processor.prototype.log = function(level, message) {
    if(this.logger) {
        this.logger.log(level, message);
    }
}

MAVLink10Processor.prototype.send = function(mavmsg) {
    buf = mavmsg.pack(this);
    this.file.write(buf);
    this.seq = (this.seq + 1) % 256;
    this.total_packets_sent +=1;
    this.total_bytes_sent += buf.length;
}

// return number of bytes needed for next parsing stage
MAVLink10Processor.prototype.bytes_needed = function() {
    ret = this.expected_length - this.buf.length;
    return ( ret <= 0 ) ? 1 : ret;
}

// add data to the local buffer
MAVLink10Processor.prototype.pushBuffer = function(data) {
    if(data) {
        this.buf = Buffer.concat([this.buf, data]);
        this.total_bytes_received += data.length;
    }
}

// Decode prefix.  Elides the prefix.
MAVLink10Processor.prototype.parsePrefix = function() {

    // Test for a message prefix.
    if( this.buf.length >= 1 && this.buf[0] != this.protocol_marker ) {

        // Strip the offending initial byte and throw an error.
        var badPrefix = this.buf[0];
        this.bufInError = this.buf.slice(0,1);
        this.buf = this.buf.slice(1);
        this.expected_length = mavlink10.HEADER_LEN;

        // TODO: enable subsequent prefix error suppression if robust_parsing is implemented
        //if(!this.have_prefix_error) {
        //    this.have_prefix_error = true;
            throw new Error("Bad prefix ("+badPrefix+")");
        //}

    }
    //else if( this.buf.length >= 1 && this.buf[0] == this.protocol_marker ) {
    //    this.have_prefix_error = false;
    //}

}

// Determine the length.  Leaves buffer untouched.
MAVLink10Processor.prototype.parseLength = function() {
    
    if( this.buf.length >= 2 ) {
        var unpacked = jspack.Unpack('BB', this.buf.slice(0, 2));
        this.expected_length = unpacked[1] + mavlink10.HEADER_LEN + 2 // length of message + header + CRC
    }

}

// input some data bytes, possibly returning a new message
MAVLink10Processor.prototype.parseChar = function(c) {

    var m = null;

    try {

        this.pushBuffer(c);
        this.parsePrefix();
        this.parseLength();
        m = this.parsePayload();

    } catch(e) {

        this.log('error', e.message);
        this.total_receive_errors += 1;
        m = new mavlink10.messages.bad_data(this.bufInError, e.message);
        this.bufInError = new Buffer.from([]);
        
    }

    if(null != m) {
        this.emit(m.name, m);
        this.emit('message', m);
    }

    return m;

}

MAVLink10Processor.prototype.parsePayload = function() {

    var m = null;

    // If we have enough bytes to try and read it, read it.
    if( this.expected_length >= 8 && this.buf.length >= this.expected_length ) {

        // Slice off the expected packet length, reset expectation to be to find a header.
        var mbuf = this.buf.slice(0, this.expected_length);
        // TODO: slicing off the buffer should depend on the error produced by the decode() function
        // - if a message we find a well formed message, cut-off the expected_length
        // - if the message is not well formed (correct prefix by accident), cut-off 1 char only
        this.buf = this.buf.slice(this.expected_length);
        this.expected_length = 6;

        // w.info("Attempting to parse packet, message candidate buffer is ["+mbuf.toByteArray()+"]");

        try {
            m = this.decode(mbuf);
            this.total_packets_received += 1;
        }
        catch(e) {
            // Set buffer in question and re-throw to generic error handling
            this.bufInError = mbuf;
            throw e;
        }
    }

    return m;

}

// input some data bytes, possibly returning an array of new messages
MAVLink10Processor.prototype.parseBuffer = function(s) {
    
    // Get a message, if one is available in the stream.
    var m = this.parseChar(s);

    // No messages available, bail.
    if ( null === m ) {
        return null;
    }
    
    // While more valid messages can be read from the existing buffer, add
    // them to the array of new messages and return them.
    var ret = [m];
    while(true) {
        m = this.parseChar();
        if ( null === m ) {
            // No more messages left.
            return ret;
        }
        ret.push(m);
    }

}

/* decode a buffer as a MAVLink message */
MAVLink10Processor.prototype.decode = function(msgbuf) {

    var magic, incompat_flags, compat_flags, mlen, seq, srcSystem, srcComponent, unpacked, msgId;

    // decode the header
    try {
        unpacked = jspack.Unpack('cBBBBB', msgbuf.slice(0, 6));
        magic = unpacked[0];
        mlen = unpacked[1];
        seq = unpacked[2];
        srcSystem = unpacked[3];
        srcComponent = unpacked[4];
        msgId = unpacked[5];
        }
    catch(e) {
        throw new Error('Unable to unpack MAVLink header: ' + e.message);
    }

    if (magic.charCodeAt(0) != this.protocol_marker) {
        throw new Error("Invalid MAVLink prefix ("+magic.charCodeAt(0)+")");
    }

    if( mlen != msgbuf.length - (mavlink10.HEADER_LEN + 2)) {
        throw new Error("Invalid MAVLink message length.  Got " + (msgbuf.length - (mavlink10.HEADER_LEN + 2)) + " expected " + mlen + ", msgId=" + msgId);
    }

    if( false === _.has(mavlink10.map, msgId) ) {
        throw new Error("Unknown MAVLink message ID (" + msgId + ")");
    }

    // decode the payload
    // refs: (fmt, type, order_map, crc_extra) = mavlink10.map[msgId]
    var decoder = mavlink10.map[msgId];

    // decode the checksum
    try {
        var receivedChecksum = jspack.Unpack('<H', msgbuf.slice(msgbuf.length - 2));
    } catch (e) {
        throw new Error("Unable to unpack MAVLink CRC: " + e.message);
    }

    var messageChecksum = mavlink10.x25Crc(msgbuf.slice(1, msgbuf.length - 2));

    // Assuming using crc_extra = True.  See the message.prototype.pack() function.
    messageChecksum = mavlink10.x25Crc([decoder.crc_extra], messageChecksum);
    
    if ( receivedChecksum != messageChecksum ) {
        throw new Error('invalid MAVLink CRC in msgID ' +msgId+ ', got 0x' + receivedChecksum + ' checksum, calculated payload checksum as 0x'+messageChecksum );
    }

    var paylen = jspack.CalcLength(decoder.format);
    var payload = msgbuf.slice(mavlink10.HEADER_LEN, msgbuf.length - 2);

        // Decode the payload and reorder the fields to match the order map.
    try {
        var t = jspack.Unpack(decoder.format, payload);
    }
    catch (e) {
        throw new Error('Unable to unpack MAVLink payload type='+decoder.type+' format='+decoder.format+' payloadLength='+ payload +': '+ e.message);
    }

    // Need to check if the message contains arrays
    var args = {};
    const elementsInMsg = decoder.order_map.length;
    const actualElementsInMsg = JSON.parse(JSON.stringify(t)).length;

    if (elementsInMsg == actualElementsInMsg) {
        // Reorder the fields to match the order map
        _.each(t, function(e, i, l) {
            args[i] = t[decoder.order_map[i]]
        });
    } else {
        // This message contains arrays
        var typeIndex = 1;
        var orderIndex = 0;
        var memberIndex = 0;
        var tempArgs = {};

        // Walk through the fields 
        for(var i = 0, size = decoder.format.length-1; i <= size; ++i) {
            var order = decoder.order_map[orderIndex];
            var currentType =  decoder.format[typeIndex];

            if (isNaN(parseInt(currentType))) {
                // This field is not an array check the type and add it to the args
                tempArgs[orderIndex] = t[memberIndex];
                memberIndex++;
            } else {
                // This field is part of an array, need to find the length of the array
                var arraySize = ''
                var newArray = []
                while (!isNaN(decoder.format[typeIndex])) {
                    arraySize = arraySize + decoder.format[typeIndex];
                    typeIndex++;
                }

                // Now that we know how long the array is, create an array with the values
                for(var j = 0, size = parseInt(arraySize); j < size; ++j){
                    newArray.push(t[j+orderIndex]);
                    memberIndex++;
                }

                // Add the array to the args object
                arraySize = arraySize + decoder.format[typeIndex];
                currentType = arraySize;
                tempArgs[orderIndex] = newArray;
            }
            orderIndex++;
            typeIndex++;
        }

        // Finally reorder the fields to match the order map
        _.each(t, function(e, i, l) {
            args[i] = tempArgs[decoder.order_map[i]]
        });
    }

    // construct the message object
    try {
        var m = new decoder.type(args);
        m.set.call(m, args);
    }
    catch (e) {
        throw new Error('Unable to instantiate MAVLink message of type '+decoder.type+' : ' + e.message);
    }
    m.msgbuf = msgbuf;
    m.payload = payload
    m.crc = receivedChecksum;
    m.header = new mavlink10.header(msgId, mlen, seq, srcSystem, srcComponent, incompat_flags, compat_flags);
    this.log(m);
    return m;
}


// Expose this code as a module
module.exports = {mavlink10, MAVLink10Processor};


}).call(this)}).call(this,require("buffer").Buffer)
},{"buffer":6,"events":10,"jspack":2,"underscore":3,"util":26}],2:[function(require,module,exports){
/*!
 *  Copyright © 2008 Fair Oaks Labs, Inc.
 *  All rights reserved.
 */

// Utility object:  Encode/Decode C-style binary primitives to/from octet arrays
function JSPack()
{
	// Module-level (private) variables
	var el,  bBE = false, m = this;


	// Raw byte arrays
	m._DeArray = function (a, p, l)
	{
		return [a.slice(p,p+l)];
	};
	m._EnArray = function (a, p, l, v)
	{
		for (var i = 0; i < l; a[p+i] = v[i]?v[i]:0, i++);
	};

	// ASCII characters
	m._DeChar = function (a, p)
	{
		return String.fromCharCode(a[p]);
	};
	m._EnChar = function (a, p, v)
	{
		a[p] = v.charCodeAt(0);
	};

	// Little-endian (un)signed N-byte integers
	m._DeInt = function (a, p)
	{
		var lsb = bBE?(el.len-1):0, nsb = bBE?-1:1, stop = lsb+nsb*el.len, rv, i, f;
		for (rv = 0, i = lsb, f = 1; i != stop; rv+=(a[p+i]*f), i+=nsb, f*=256);
		if (el.bSigned && (rv & Math.pow(2, el.len*8-1))) { rv -= Math.pow(2, el.len*8); }
		return rv;
	};
	m._EnInt = function (a, p, v)
	{
		var lsb = bBE?(el.len-1):0, nsb = bBE?-1:1, stop = lsb+nsb*el.len, i;
		v = (v<el.min)?el.min:(v>el.max)?el.max:v;
		for (i = lsb; i != stop; a[p+i]=v&0xff, i+=nsb, v>>=8);
	};

	// ASCII character strings
	m._DeString = function (a, p, l)
	{
		for (var rv = new Array(l), i = 0; i < l; rv[i] = String.fromCharCode(a[p+i]), i++);
		return rv.join('');
	};
	m._EnString = function (a, p, l, v)
	{
		for (var t, i = 0; i < l; a[p+i] = (t=v.charCodeAt(i))?t:0, i++);
	};

	// Little-endian N-bit IEEE 754 floating point
	m._De754 = function (a, p)
	{
		var s, e, m, i, d, nBits, mLen, eLen, eBias, eMax;
		mLen = el.mLen, eLen = el.len*8-el.mLen-1, eMax = (1<<eLen)-1, eBias = eMax>>1;

		i = bBE?0:(el.len-1); d = bBE?1:-1; s = a[p+i]; i+=d; nBits = -7;
		for (e = s&((1<<(-nBits))-1), s>>=(-nBits), nBits += eLen; nBits > 0; e=e*256+a[p+i], i+=d, nBits-=8);
		for (m = e&((1<<(-nBits))-1), e>>=(-nBits), nBits += mLen; nBits > 0; m=m*256+a[p+i], i+=d, nBits-=8);

		switch (e)
		{
			case 0:
				// Zero, or denormalized number
				e = 1-eBias;
				break;
			case eMax:
				// NaN, or +/-Infinity
				return m?NaN:((s?-1:1)*Infinity);
			default:
				// Normalized number
				m = m + Math.pow(2, mLen);
				e = e - eBias;
				break;
		}
		return (s?-1:1) * m * Math.pow(2, e-mLen);
	};
	m._En754 = function (a, p, v)
	{
		var s, e, m, i, d, c, mLen, eLen, eBias, eMax;
		mLen = el.mLen, eLen = el.len*8-el.mLen-1, eMax = (1<<eLen)-1, eBias = eMax>>1;

		s = v<0?1:0;
		v = Math.abs(v);
		if (isNaN(v) || (v == Infinity))
		{
			m = isNaN(v)?1:0;
			e = eMax;
		}
		else
		{
			e = Math.floor(Math.log(v)/Math.LN2);			// Calculate log2 of the value
			if (v*(c = Math.pow(2, -e)) < 1) { e--; c*=2; }		// Math.log() isn't 100% reliable

			// Round by adding 1/2 the significand's LSD
			if (e+eBias >= 1) { v += el.rt/c; }			// Normalized:  mLen significand digits
			else { v += el.rt*Math.pow(2, 1-eBias); } 		// Denormalized:  <= mLen significand digits
			if (v*c >= 2) { e++; c/=2; }				// Rounding can increment the exponent

			if (e+eBias >= eMax)
			{
				// Overflow
				m = 0;
				e = eMax;
			}
			else if (e+eBias >= 1)
			{
				// Normalized - term order matters, as Math.pow(2, 52-e) and v*Math.pow(2, 52) can overflow
				m = (v*c-1)*Math.pow(2, mLen);
				e = e + eBias;
			}
			else
			{
				// Denormalized - also catches the '0' case, somewhat by chance
				m = v*Math.pow(2, eBias-1)*Math.pow(2, mLen);
				e = 0;
			}
		}

		for (i = bBE?(el.len-1):0, d=bBE?-1:1; mLen >= 8; a[p+i]=m&0xff, i+=d, m/=256, mLen-=8);
		for (e=(e<<mLen)|m, eLen+=mLen; eLen > 0; a[p+i]=e&0xff, i+=d, e/=256, eLen-=8);
		a[p+i-d] |= s*128;
	};

	// Convert int64 to array with 3 elements: [lowBits, highBits, unsignedFlag]
	// '>>>' trick to convert signed 32bit int to unsigned int (because << always results in a signed 32bit int)
	m._DeInt64 = function (a, p) {
		var start = bBE ? 0 : 7, nsb = bBE ? 1 : -1, stop = start + nsb * 8, rv = [0,0, !el.bSigned], i, f, rvi;
		for (i = start, rvi = 1, f = 0;
			i != stop;
			rv[rvi] = (((rv[rvi]<<8)>>>0) + a[p + i]), i += nsb, f++, rvi = (f < 4 ? 1 : 0));
		return rv;
	};
	m._EnInt64 = function (a, p, v) {
		var start = bBE ? 0 : 7, nsb = bBE ? 1 : -1, stop = start + nsb * 8, i, f, rvi, s;
		for (i = start, rvi = 1, f = 0, s = 24;
			i != stop;
			a[p + i] = v[rvi]>>s & 0xff, i += nsb, f++, rvi = (f < 4 ? 1 : 0), s = 24 - (8 * (f % 4)));
	};
	

	// Class data
	m._sPattern	= '(\\d+)?([AxcbBhHsfdiIlLqQ])';
	m._lenLut	= {'A':1, 'x':1, 'c':1, 'b':1, 'B':1, 'h':2, 'H':2, 's':1, 'f':4, 'd':8, 'i':4, 'I':4, 'l':4, 'L':4, 'q':8, 'Q':8};
	m._elLut	= {	'A': {en:m._EnArray, de:m._DeArray},
				's': {en:m._EnString, de:m._DeString},
				'c': {en:m._EnChar, de:m._DeChar},
				'b': {en:m._EnInt, de:m._DeInt, len:1, bSigned:true, min:-Math.pow(2, 7), max:Math.pow(2, 7)-1},
				'B': {en:m._EnInt, de:m._DeInt, len:1, bSigned:false, min:0, max:Math.pow(2, 8)-1},
				'h': {en:m._EnInt, de:m._DeInt, len:2, bSigned:true, min:-Math.pow(2, 15), max:Math.pow(2, 15)-1},
				'H': {en:m._EnInt, de:m._DeInt, len:2, bSigned:false, min:0, max:Math.pow(2, 16)-1},
				'i': {en:m._EnInt, de:m._DeInt, len:4, bSigned:true, min:-Math.pow(2, 31), max:Math.pow(2, 31)-1},
				'I': {en:m._EnInt, de:m._DeInt, len:4, bSigned:false, min:0, max:Math.pow(2, 32)-1},
				'l': {en:m._EnInt, de:m._DeInt, len:4, bSigned:true, min:-Math.pow(2, 31), max:Math.pow(2, 31)-1},
				'L': {en:m._EnInt, de:m._DeInt, len:4, bSigned:false, min:0, max:Math.pow(2, 32)-1},
				'f': {en:m._En754, de:m._De754, len:4, mLen:23, rt:Math.pow(2, -24)-Math.pow(2, -77)},
				'd': {en:m._En754, de:m._De754, len:8, mLen:52, rt:0},
				'q': {en:m._EnInt64, de:m._DeInt64, bSigned:true},
				'Q': {en:m._EnInt64, de:m._DeInt64, bSigned:false}};

	// Unpack a series of n elements of size s from array a at offset p with fxn
	m._UnpackSeries = function (n, s, a, p)
	{
		for (var fxn = el.de, rv = [], i = 0; i < n; rv.push(fxn(a, p+i*s)), i++);
		return rv;
	};

	// Pack a series of n elements of size s from array v at offset i to array a at offset p with fxn
	m._PackSeries = function (n, s, a, p, v, i)
	{
		for (var fxn = el.en, o = 0; o < n; fxn(a, p+o*s, v[i+o]), o++);
	};

	// Unpack the octet array a, beginning at offset p, according to the fmt string
	m.Unpack = function (fmt, a, p)
	{
		// Set the private bBE flag based on the format string - assume big-endianness
		bBE = (fmt.charAt(0) != '<');

		p = p?p:0;
		var re = new RegExp(this._sPattern, 'g'), m, n, s, rv = [];
		while (m = re.exec(fmt))
		{
			n = ((m[1]==undefined)||(m[1]==''))?1:parseInt(m[1]);
			s = this._lenLut[m[2]];
			if ((p + n*s) > a.length)
			{
				return undefined;
			}
			switch (m[2])
			{
				case 'A': case 's':
					rv.push(this._elLut[m[2]].de(a, p, n));
					break;
				case 'c': case 'b': case 'B': case 'h': case 'H':
				case 'i': case 'I': case 'l': case 'L': case 'f': case 'd': case 'q': case 'Q':
					el = this._elLut[m[2]];
					rv.push(this._UnpackSeries(n, s, a, p));
					break;
			}
			p += n*s;
		}
		return Array.prototype.concat.apply([], rv);
	};

	// Pack the supplied values into the octet array a, beginning at offset p, according to the fmt string
	m.PackTo = function (fmt, a, p, values)
	{
		// Set the private bBE flag based on the format string - assume big-endianness
		bBE = (fmt.charAt(0) != '<');

		var re = new RegExp(this._sPattern, 'g'), m, n, s, i = 0, j;
		while (m = re.exec(fmt))
		{
			n = ((m[1]==undefined)||(m[1]==''))?1:parseInt(m[1]);
			s = this._lenLut[m[2]];
			if ((p + n*s) > a.length)
			{
				return false;
			}
			switch (m[2])
			{
				case 'A': case 's':
					if ((i + 1) > values.length) { return false; }
					this._elLut[m[2]].en(a, p, n, values[i]);
					i += 1;
					break;
				case 'c': case 'b': case 'B': case 'h': case 'H':
				case 'i': case 'I': case 'l': case 'L': case 'f': case 'd': case 'q': case 'Q':
					el = this._elLut[m[2]];
					if ((i + n) > values.length) { return false; }
					this._PackSeries(n, s, a, p, values, i);
					i += n;
					break;
				case 'x':
					for (j = 0; j < n; j++) { a[p+j] = 0; }
					break;
			}
			p += n*s;
		}
		return a;
	};

	// Pack the supplied values into a new octet array, according to the fmt string
	m.Pack = function (fmt, values)
	{
		return this.PackTo(fmt, new Array(this.CalcLength(fmt)), 0, values);
	};

	// Determine the number of bytes represented by the format string
	m.CalcLength = function (fmt)
	{
		var re = new RegExp(this._sPattern, 'g'), m, sum = 0;
		while (m = re.exec(fmt))
		{
			sum += (((m[1]==undefined)||(m[1]==''))?1:parseInt(m[1])) * this._lenLut[m[2]];
		}
		return sum;
	};
};

exports.jspack = new JSPack();

},{}],3:[function(require,module,exports){
(function (global){(function (){
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
  typeof define === 'function' && define.amd ? define('underscore', factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
    var current = global._;
    var exports = global._ = factory();
    exports.noConflict = function () { global._ = current; return exports; };
  }()));
}(this, (function () {
  //     Underscore.js 1.13.2
  //     https://underscorejs.org
  //     (c) 2009-2021 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors
  //     Underscore may be freely distributed under the MIT license.

  // Current version.
  var VERSION = '1.13.2';

  // Establish the root object, `window` (`self`) in the browser, `global`
  // on the server, or `this` in some virtual machines. We use `self`
  // instead of `window` for `WebWorker` support.
  var root = typeof self == 'object' && self.self === self && self ||
            typeof global == 'object' && global.global === global && global ||
            Function('return this')() ||
            {};

  // Save bytes in the minified (but not gzipped) version:
  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;

  // Create quick reference variables for speed access to core prototypes.
  var push = ArrayProto.push,
      slice = ArrayProto.slice,
      toString = ObjProto.toString,
      hasOwnProperty = ObjProto.hasOwnProperty;

  // Modern feature detection.
  var supportsArrayBuffer = typeof ArrayBuffer !== 'undefined',
      supportsDataView = typeof DataView !== 'undefined';

  // All **ECMAScript 5+** native function implementations that we hope to use
  // are declared here.
  var nativeIsArray = Array.isArray,
      nativeKeys = Object.keys,
      nativeCreate = Object.create,
      nativeIsView = supportsArrayBuffer && ArrayBuffer.isView;

  // Create references to these builtin functions because we override them.
  var _isNaN = isNaN,
      _isFinite = isFinite;

  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];

  // The largest integer that can be represented exactly.
  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;

  // Some functions take a variable number of arguments, or a few expected
  // arguments at the beginning and then a variable number of values to operate
  // on. This helper accumulates all remaining arguments past the function’s
  // argument length (or an explicit `startIndex`), into an array that becomes
  // the last argument. Similar to ES6’s "rest parameter".
  function restArguments(func, startIndex) {
    startIndex = startIndex == null ? func.length - 1 : +startIndex;
    return function() {
      var length = Math.max(arguments.length - startIndex, 0),
          rest = Array(length),
          index = 0;
      for (; index < length; index++) {
        rest[index] = arguments[index + startIndex];
      }
      switch (startIndex) {
        case 0: return func.call(this, rest);
        case 1: return func.call(this, arguments[0], rest);
        case 2: return func.call(this, arguments[0], arguments[1], rest);
      }
      var args = Array(startIndex + 1);
      for (index = 0; index < startIndex; index++) {
        args[index] = arguments[index];
      }
      args[startIndex] = rest;
      return func.apply(this, args);
    };
  }

  // Is a given variable an object?
  function isObject(obj) {
    var type = typeof obj;
    return type === 'function' || type === 'object' && !!obj;
  }

  // Is a given value equal to null?
  function isNull(obj) {
    return obj === null;
  }

  // Is a given variable undefined?
  function isUndefined(obj) {
    return obj === void 0;
  }

  // Is a given value a boolean?
  function isBoolean(obj) {
    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
  }

  // Is a given value a DOM element?
  function isElement(obj) {
    return !!(obj && obj.nodeType === 1);
  }

  // Internal function for creating a `toString`-based type tester.
  function tagTester(name) {
    var tag = '[object ' + name + ']';
    return function(obj) {
      return toString.call(obj) === tag;
    };
  }

  var isString = tagTester('String');

  var isNumber = tagTester('Number');

  var isDate = tagTester('Date');

  var isRegExp = tagTester('RegExp');

  var isError = tagTester('Error');

  var isSymbol = tagTester('Symbol');

  var isArrayBuffer = tagTester('ArrayBuffer');

  var isFunction = tagTester('Function');

  // Optimize `isFunction` if appropriate. Work around some `typeof` bugs in old
  // v8, IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
  var nodelist = root.document && root.document.childNodes;
  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
    isFunction = function(obj) {
      return typeof obj == 'function' || false;
    };
  }

  var isFunction$1 = isFunction;

  var hasObjectTag = tagTester('Object');

  // In IE 10 - Edge 13, `DataView` has string tag `'[object Object]'`.
  // In IE 11, the most common among them, this problem also applies to
  // `Map`, `WeakMap` and `Set`.
  var hasStringTagBug = (
        supportsDataView && hasObjectTag(new DataView(new ArrayBuffer(8)))
      ),
      isIE11 = (typeof Map !== 'undefined' && hasObjectTag(new Map));

  var isDataView = tagTester('DataView');

  // In IE 10 - Edge 13, we need a different heuristic
  // to determine whether an object is a `DataView`.
  function ie10IsDataView(obj) {
    return obj != null && isFunction$1(obj.getInt8) && isArrayBuffer(obj.buffer);
  }

  var isDataView$1 = (hasStringTagBug ? ie10IsDataView : isDataView);

  // Is a given value an array?
  // Delegates to ECMA5's native `Array.isArray`.
  var isArray = nativeIsArray || tagTester('Array');

  // Internal function to check whether `key` is an own property name of `obj`.
  function has$1(obj, key) {
    return obj != null && hasOwnProperty.call(obj, key);
  }

  var isArguments = tagTester('Arguments');

  // Define a fallback version of the method in browsers (ahem, IE < 9), where
  // there isn't any inspectable "Arguments" type.
  (function() {
    if (!isArguments(arguments)) {
      isArguments = function(obj) {
        return has$1(obj, 'callee');
      };
    }
  }());

  var isArguments$1 = isArguments;

  // Is a given object a finite number?
  function isFinite$1(obj) {
    return !isSymbol(obj) && _isFinite(obj) && !isNaN(parseFloat(obj));
  }

  // Is the given value `NaN`?
  function isNaN$1(obj) {
    return isNumber(obj) && _isNaN(obj);
  }

  // Predicate-generating function. Often useful outside of Underscore.
  function constant(value) {
    return function() {
      return value;
    };
  }

  // Common internal logic for `isArrayLike` and `isBufferLike`.
  function createSizePropertyCheck(getSizeProperty) {
    return function(collection) {
      var sizeProperty = getSizeProperty(collection);
      return typeof sizeProperty == 'number' && sizeProperty >= 0 && sizeProperty <= MAX_ARRAY_INDEX;
    }
  }

  // Internal helper to generate a function to obtain property `key` from `obj`.
  function shallowProperty(key) {
    return function(obj) {
      return obj == null ? void 0 : obj[key];
    };
  }

  // Internal helper to obtain the `byteLength` property of an object.
  var getByteLength = shallowProperty('byteLength');

  // Internal helper to determine whether we should spend extensive checks against
  // `ArrayBuffer` et al.
  var isBufferLike = createSizePropertyCheck(getByteLength);

  // Is a given value a typed array?
  var typedArrayPattern = /\[object ((I|Ui)nt(8|16|32)|Float(32|64)|Uint8Clamped|Big(I|Ui)nt64)Array\]/;
  function isTypedArray(obj) {
    // `ArrayBuffer.isView` is the most future-proof, so use it when available.
    // Otherwise, fall back on the above regular expression.
    return nativeIsView ? (nativeIsView(obj) && !isDataView$1(obj)) :
                  isBufferLike(obj) && typedArrayPattern.test(toString.call(obj));
  }

  var isTypedArray$1 = supportsArrayBuffer ? isTypedArray : constant(false);

  // Internal helper to obtain the `length` property of an object.
  var getLength = shallowProperty('length');

  // Internal helper to create a simple lookup structure.
  // `collectNonEnumProps` used to depend on `_.contains`, but this led to
  // circular imports. `emulatedSet` is a one-off solution that only works for
  // arrays of strings.
  function emulatedSet(keys) {
    var hash = {};
    for (var l = keys.length, i = 0; i < l; ++i) hash[keys[i]] = true;
    return {
      contains: function(key) { return hash[key] === true; },
      push: function(key) {
        hash[key] = true;
        return keys.push(key);
      }
    };
  }

  // Internal helper. Checks `keys` for the presence of keys in IE < 9 that won't
  // be iterated by `for key in ...` and thus missed. Extends `keys` in place if
  // needed.
  function collectNonEnumProps(obj, keys) {
    keys = emulatedSet(keys);
    var nonEnumIdx = nonEnumerableProps.length;
    var constructor = obj.constructor;
    var proto = isFunction$1(constructor) && constructor.prototype || ObjProto;

    // Constructor is a special case.
    var prop = 'constructor';
    if (has$1(obj, prop) && !keys.contains(prop)) keys.push(prop);

    while (nonEnumIdx--) {
      prop = nonEnumerableProps[nonEnumIdx];
      if (prop in obj && obj[prop] !== proto[prop] && !keys.contains(prop)) {
        keys.push(prop);
      }
    }
  }

  // Retrieve the names of an object's own properties.
  // Delegates to **ECMAScript 5**'s native `Object.keys`.
  function keys(obj) {
    if (!isObject(obj)) return [];
    if (nativeKeys) return nativeKeys(obj);
    var keys = [];
    for (var key in obj) if (has$1(obj, key)) keys.push(key);
    // Ahem, IE < 9.
    if (hasEnumBug) collectNonEnumProps(obj, keys);
    return keys;
  }

  // Is a given array, string, or object empty?
  // An "empty" object has no enumerable own-properties.
  function isEmpty(obj) {
    if (obj == null) return true;
    // Skip the more expensive `toString`-based type checks if `obj` has no
    // `.length`.
    var length = getLength(obj);
    if (typeof length == 'number' && (
      isArray(obj) || isString(obj) || isArguments$1(obj)
    )) return length === 0;
    return getLength(keys(obj)) === 0;
  }

  // Returns whether an object has a given set of `key:value` pairs.
  function isMatch(object, attrs) {
    var _keys = keys(attrs), length = _keys.length;
    if (object == null) return !length;
    var obj = Object(object);
    for (var i = 0; i < length; i++) {
      var key = _keys[i];
      if (attrs[key] !== obj[key] || !(key in obj)) return false;
    }
    return true;
  }

  // If Underscore is called as a function, it returns a wrapped object that can
  // be used OO-style. This wrapper holds altered versions of all functions added
  // through `_.mixin`. Wrapped objects may be chained.
  function _$1(obj) {
    if (obj instanceof _$1) return obj;
    if (!(this instanceof _$1)) return new _$1(obj);
    this._wrapped = obj;
  }

  _$1.VERSION = VERSION;

  // Extracts the result from a wrapped and chained object.
  _$1.prototype.value = function() {
    return this._wrapped;
  };

  // Provide unwrapping proxies for some methods used in engine operations
  // such as arithmetic and JSON stringification.
  _$1.prototype.valueOf = _$1.prototype.toJSON = _$1.prototype.value;

  _$1.prototype.toString = function() {
    return String(this._wrapped);
  };

  // Internal function to wrap or shallow-copy an ArrayBuffer,
  // typed array or DataView to a new view, reusing the buffer.
  function toBufferView(bufferSource) {
    return new Uint8Array(
      bufferSource.buffer || bufferSource,
      bufferSource.byteOffset || 0,
      getByteLength(bufferSource)
    );
  }

  // We use this string twice, so give it a name for minification.
  var tagDataView = '[object DataView]';

  // Internal recursive comparison function for `_.isEqual`.
  function eq(a, b, aStack, bStack) {
    // Identical objects are equal. `0 === -0`, but they aren't identical.
    // See the [Harmony `egal` proposal](https://wiki.ecmascript.org/doku.php?id=harmony:egal).
    if (a === b) return a !== 0 || 1 / a === 1 / b;
    // `null` or `undefined` only equal to itself (strict comparison).
    if (a == null || b == null) return false;
    // `NaN`s are equivalent, but non-reflexive.
    if (a !== a) return b !== b;
    // Exhaust primitive checks
    var type = typeof a;
    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
    return deepEq(a, b, aStack, bStack);
  }

  // Internal recursive comparison function for `_.isEqual`.
  function deepEq(a, b, aStack, bStack) {
    // Unwrap any wrapped objects.
    if (a instanceof _$1) a = a._wrapped;
    if (b instanceof _$1) b = b._wrapped;
    // Compare `[[Class]]` names.
    var className = toString.call(a);
    if (className !== toString.call(b)) return false;
    // Work around a bug in IE 10 - Edge 13.
    if (hasStringTagBug && className == '[object Object]' && isDataView$1(a)) {
      if (!isDataView$1(b)) return false;
      className = tagDataView;
    }
    switch (className) {
      // These types are compared by value.
      case '[object RegExp]':
        // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
      case '[object String]':
        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
        // equivalent to `new String("5")`.
        return '' + a === '' + b;
      case '[object Number]':
        // `NaN`s are equivalent, but non-reflexive.
        // Object(NaN) is equivalent to NaN.
        if (+a !== +a) return +b !== +b;
        // An `egal` comparison is performed for other numeric values.
        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
      case '[object Date]':
      case '[object Boolean]':
        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
        // millisecond representations. Note that invalid dates with millisecond representations
        // of `NaN` are not equivalent.
        return +a === +b;
      case '[object Symbol]':
        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
      case '[object ArrayBuffer]':
      case tagDataView:
        // Coerce to typed array so we can fall through.
        return deepEq(toBufferView(a), toBufferView(b), aStack, bStack);
    }

    var areArrays = className === '[object Array]';
    if (!areArrays && isTypedArray$1(a)) {
        var byteLength = getByteLength(a);
        if (byteLength !== getByteLength(b)) return false;
        if (a.buffer === b.buffer && a.byteOffset === b.byteOffset) return true;
        areArrays = true;
    }
    if (!areArrays) {
      if (typeof a != 'object' || typeof b != 'object') return false;

      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
      // from different frames are.
      var aCtor = a.constructor, bCtor = b.constructor;
      if (aCtor !== bCtor && !(isFunction$1(aCtor) && aCtor instanceof aCtor &&
                               isFunction$1(bCtor) && bCtor instanceof bCtor)
                          && ('constructor' in a && 'constructor' in b)) {
        return false;
      }
    }
    // Assume equality for cyclic structures. The algorithm for detecting cyclic
    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.

    // Initializing stack of traversed objects.
    // It's done here since we only need them for objects and arrays comparison.
    aStack = aStack || [];
    bStack = bStack || [];
    var length = aStack.length;
    while (length--) {
      // Linear search. Performance is inversely proportional to the number of
      // unique nested structures.
      if (aStack[length] === a) return bStack[length] === b;
    }

    // Add the first object to the stack of traversed objects.
    aStack.push(a);
    bStack.push(b);

    // Recursively compare objects and arrays.
    if (areArrays) {
      // Compare array lengths to determine if a deep comparison is necessary.
      length = a.length;
      if (length !== b.length) return false;
      // Deep compare the contents, ignoring non-numeric properties.
      while (length--) {
        if (!eq(a[length], b[length], aStack, bStack)) return false;
      }
    } else {
      // Deep compare objects.
      var _keys = keys(a), key;
      length = _keys.length;
      // Ensure that both objects contain the same number of properties before comparing deep equality.
      if (keys(b).length !== length) return false;
      while (length--) {
        // Deep compare each member
        key = _keys[length];
        if (!(has$1(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
      }
    }
    // Remove the first object from the stack of traversed objects.
    aStack.pop();
    bStack.pop();
    return true;
  }

  // Perform a deep comparison to check if two objects are equal.
  function isEqual(a, b) {
    return eq(a, b);
  }

  // Retrieve all the enumerable property names of an object.
  function allKeys(obj) {
    if (!isObject(obj)) return [];
    var keys = [];
    for (var key in obj) keys.push(key);
    // Ahem, IE < 9.
    if (hasEnumBug) collectNonEnumProps(obj, keys);
    return keys;
  }

  // Since the regular `Object.prototype.toString` type tests don't work for
  // some types in IE 11, we use a fingerprinting heuristic instead, based
  // on the methods. It's not great, but it's the best we got.
  // The fingerprint method lists are defined below.
  function ie11fingerprint(methods) {
    var length = getLength(methods);
    return function(obj) {
      if (obj == null) return false;
      // `Map`, `WeakMap` and `Set` have no enumerable keys.
      var keys = allKeys(obj);
      if (getLength(keys)) return false;
      for (var i = 0; i < length; i++) {
        if (!isFunction$1(obj[methods[i]])) return false;
      }
      // If we are testing against `WeakMap`, we need to ensure that
      // `obj` doesn't have a `forEach` method in order to distinguish
      // it from a regular `Map`.
      return methods !== weakMapMethods || !isFunction$1(obj[forEachName]);
    };
  }

  // In the interest of compact minification, we write
  // each string in the fingerprints only once.
  var forEachName = 'forEach',
      hasName = 'has',
      commonInit = ['clear', 'delete'],
      mapTail = ['get', hasName, 'set'];

  // `Map`, `WeakMap` and `Set` each have slightly different
  // combinations of the above sublists.
  var mapMethods = commonInit.concat(forEachName, mapTail),
      weakMapMethods = commonInit.concat(mapTail),
      setMethods = ['add'].concat(commonInit, forEachName, hasName);

  var isMap = isIE11 ? ie11fingerprint(mapMethods) : tagTester('Map');

  var isWeakMap = isIE11 ? ie11fingerprint(weakMapMethods) : tagTester('WeakMap');

  var isSet = isIE11 ? ie11fingerprint(setMethods) : tagTester('Set');

  var isWeakSet = tagTester('WeakSet');

  // Retrieve the values of an object's properties.
  function values(obj) {
    var _keys = keys(obj);
    var length = _keys.length;
    var values = Array(length);
    for (var i = 0; i < length; i++) {
      values[i] = obj[_keys[i]];
    }
    return values;
  }

  // Convert an object into a list of `[key, value]` pairs.
  // The opposite of `_.object` with one argument.
  function pairs(obj) {
    var _keys = keys(obj);
    var length = _keys.length;
    var pairs = Array(length);
    for (var i = 0; i < length; i++) {
      pairs[i] = [_keys[i], obj[_keys[i]]];
    }
    return pairs;
  }

  // Invert the keys and values of an object. The values must be serializable.
  function invert(obj) {
    var result = {};
    var _keys = keys(obj);
    for (var i = 0, length = _keys.length; i < length; i++) {
      result[obj[_keys[i]]] = _keys[i];
    }
    return result;
  }

  // Return a sorted list of the function names available on the object.
  function functions(obj) {
    var names = [];
    for (var key in obj) {
      if (isFunction$1(obj[key])) names.push(key);
    }
    return names.sort();
  }

  // An internal function for creating assigner functions.
  function createAssigner(keysFunc, defaults) {
    return function(obj) {
      var length = arguments.length;
      if (defaults) obj = Object(obj);
      if (length < 2 || obj == null) return obj;
      for (var index = 1; index < length; index++) {
        var source = arguments[index],
            keys = keysFunc(source),
            l = keys.length;
        for (var i = 0; i < l; i++) {
          var key = keys[i];
          if (!defaults || obj[key] === void 0) obj[key] = source[key];
        }
      }
      return obj;
    };
  }

  // Extend a given object with all the properties in passed-in object(s).
  var extend = createAssigner(allKeys);

  // Assigns a given object with all the own properties in the passed-in
  // object(s).
  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
  var extendOwn = createAssigner(keys);

  // Fill in a given object with default properties.
  var defaults = createAssigner(allKeys, true);

  // Create a naked function reference for surrogate-prototype-swapping.
  function ctor() {
    return function(){};
  }

  // An internal function for creating a new object that inherits from another.
  function baseCreate(prototype) {
    if (!isObject(prototype)) return {};
    if (nativeCreate) return nativeCreate(prototype);
    var Ctor = ctor();
    Ctor.prototype = prototype;
    var result = new Ctor;
    Ctor.prototype = null;
    return result;
  }

  // Creates an object that inherits from the given prototype object.
  // If additional properties are provided then they will be added to the
  // created object.
  function create(prototype, props) {
    var result = baseCreate(prototype);
    if (props) extendOwn(result, props);
    return result;
  }

  // Create a (shallow-cloned) duplicate of an object.
  function clone(obj) {
    if (!isObject(obj)) return obj;
    return isArray(obj) ? obj.slice() : extend({}, obj);
  }

  // Invokes `interceptor` with the `obj` and then returns `obj`.
  // The primary purpose of this method is to "tap into" a method chain, in
  // order to perform operations on intermediate results within the chain.
  function tap(obj, interceptor) {
    interceptor(obj);
    return obj;
  }

  // Normalize a (deep) property `path` to array.
  // Like `_.iteratee`, this function can be customized.
  function toPath$1(path) {
    return isArray(path) ? path : [path];
  }
  _$1.toPath = toPath$1;

  // Internal wrapper for `_.toPath` to enable minification.
  // Similar to `cb` for `_.iteratee`.
  function toPath(path) {
    return _$1.toPath(path);
  }

  // Internal function to obtain a nested property in `obj` along `path`.
  function deepGet(obj, path) {
    var length = path.length;
    for (var i = 0; i < length; i++) {
      if (obj == null) return void 0;
      obj = obj[path[i]];
    }
    return length ? obj : void 0;
  }

  // Get the value of the (deep) property on `path` from `object`.
  // If any property in `path` does not exist or if the value is
  // `undefined`, return `defaultValue` instead.
  // The `path` is normalized through `_.toPath`.
  function get(object, path, defaultValue) {
    var value = deepGet(object, toPath(path));
    return isUndefined(value) ? defaultValue : value;
  }

  // Shortcut function for checking if an object has a given property directly on
  // itself (in other words, not on a prototype). Unlike the internal `has`
  // function, this public version can also traverse nested properties.
  function has(obj, path) {
    path = toPath(path);
    var length = path.length;
    for (var i = 0; i < length; i++) {
      var key = path[i];
      if (!has$1(obj, key)) return false;
      obj = obj[key];
    }
    return !!length;
  }

  // Keep the identity function around for default iteratees.
  function identity(value) {
    return value;
  }

  // Returns a predicate for checking whether an object has a given set of
  // `key:value` pairs.
  function matcher(attrs) {
    attrs = extendOwn({}, attrs);
    return function(obj) {
      return isMatch(obj, attrs);
    };
  }

  // Creates a function that, when passed an object, will traverse that object’s
  // properties down the given `path`, specified as an array of keys or indices.
  function property(path) {
    path = toPath(path);
    return function(obj) {
      return deepGet(obj, path);
    };
  }

  // Internal function that returns an efficient (for current engines) version
  // of the passed-in callback, to be repeatedly applied in other Underscore
  // functions.
  function optimizeCb(func, context, argCount) {
    if (context === void 0) return func;
    switch (argCount == null ? 3 : argCount) {
      case 1: return function(value) {
        return func.call(context, value);
      };
      // The 2-argument case is omitted because we’re not using it.
      case 3: return function(value, index, collection) {
        return func.call(context, value, index, collection);
      };
      case 4: return function(accumulator, value, index, collection) {
        return func.call(context, accumulator, value, index, collection);
      };
    }
    return function() {
      return func.apply(context, arguments);
    };
  }

  // An internal function to generate callbacks that can be applied to each
  // element in a collection, returning the desired result — either `_.identity`,
  // an arbitrary callback, a property matcher, or a property accessor.
  function baseIteratee(value, context, argCount) {
    if (value == null) return identity;
    if (isFunction$1(value)) return optimizeCb(value, context, argCount);
    if (isObject(value) && !isArray(value)) return matcher(value);
    return property(value);
  }

  // External wrapper for our callback generator. Users may customize
  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
  // This abstraction hides the internal-only `argCount` argument.
  function iteratee(value, context) {
    return baseIteratee(value, context, Infinity);
  }
  _$1.iteratee = iteratee;

  // The function we call internally to generate a callback. It invokes
  // `_.iteratee` if overridden, otherwise `baseIteratee`.
  function cb(value, context, argCount) {
    if (_$1.iteratee !== iteratee) return _$1.iteratee(value, context);
    return baseIteratee(value, context, argCount);
  }

  // Returns the results of applying the `iteratee` to each element of `obj`.
  // In contrast to `_.map` it returns an object.
  function mapObject(obj, iteratee, context) {
    iteratee = cb(iteratee, context);
    var _keys = keys(obj),
        length = _keys.length,
        results = {};
    for (var index = 0; index < length; index++) {
      var currentKey = _keys[index];
      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
    }
    return results;
  }

  // Predicate-generating function. Often useful outside of Underscore.
  function noop(){}

  // Generates a function for a given object that returns a given property.
  function propertyOf(obj) {
    if (obj == null) return noop;
    return function(path) {
      return get(obj, path);
    };
  }

  // Run a function **n** times.
  function times(n, iteratee, context) {
    var accum = Array(Math.max(0, n));
    iteratee = optimizeCb(iteratee, context, 1);
    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
    return accum;
  }

  // Return a random integer between `min` and `max` (inclusive).
  function random(min, max) {
    if (max == null) {
      max = min;
      min = 0;
    }
    return min + Math.floor(Math.random() * (max - min + 1));
  }

  // A (possibly faster) way to get the current timestamp as an integer.
  var now = Date.now || function() {
    return new Date().getTime();
  };

  // Internal helper to generate functions for escaping and unescaping strings
  // to/from HTML interpolation.
  function createEscaper(map) {
    var escaper = function(match) {
      return map[match];
    };
    // Regexes for identifying a key that needs to be escaped.
    var source = '(?:' + keys(map).join('|') + ')';
    var testRegexp = RegExp(source);
    var replaceRegexp = RegExp(source, 'g');
    return function(string) {
      string = string == null ? '' : '' + string;
      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
    };
  }

  // Internal list of HTML entities for escaping.
  var escapeMap = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#x27;',
    '`': '&#x60;'
  };

  // Function for escaping strings to HTML interpolation.
  var _escape = createEscaper(escapeMap);

  // Internal list of HTML entities for unescaping.
  var unescapeMap = invert(escapeMap);

  // Function for unescaping strings from HTML interpolation.
  var _unescape = createEscaper(unescapeMap);

  // By default, Underscore uses ERB-style template delimiters. Change the
  // following template settings to use alternative delimiters.
  var templateSettings = _$1.templateSettings = {
    evaluate: /<%([\s\S]+?)%>/g,
    interpolate: /<%=([\s\S]+?)%>/g,
    escape: /<%-([\s\S]+?)%>/g
  };

  // When customizing `_.templateSettings`, if you don't want to define an
  // interpolation, evaluation or escaping regex, we need one that is
  // guaranteed not to match.
  var noMatch = /(.)^/;

  // Certain characters need to be escaped so that they can be put into a
  // string literal.
  var escapes = {
    "'": "'",
    '\\': '\\',
    '\r': 'r',
    '\n': 'n',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;

  function escapeChar(match) {
    return '\\' + escapes[match];
  }

  // In order to prevent third-party code injection through
  // `_.templateSettings.variable`, we test it against the following regular
  // expression. It is intentionally a bit more liberal than just matching valid
  // identifiers, but still prevents possible loopholes through defaults or
  // destructuring assignment.
  var bareIdentifier = /^\s*(\w|\$)+\s*$/;

  // JavaScript micro-templating, similar to John Resig's implementation.
  // Underscore templating handles arbitrary delimiters, preserves whitespace,
  // and correctly escapes quotes within interpolated code.
  // NB: `oldSettings` only exists for backwards compatibility.
  function template(text, settings, oldSettings) {
    if (!settings && oldSettings) settings = oldSettings;
    settings = defaults({}, settings, _$1.templateSettings);

    // Combine delimiters into one regular expression via alternation.
    var matcher = RegExp([
      (settings.escape || noMatch).source,
      (settings.interpolate || noMatch).source,
      (settings.evaluate || noMatch).source
    ].join('|') + '|$', 'g');

    // Compile the template source, escaping string literals appropriately.
    var index = 0;
    var source = "__p+='";
    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
      index = offset + match.length;

      if (escape) {
        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
      } else if (interpolate) {
        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
      } else if (evaluate) {
        source += "';\n" + evaluate + "\n__p+='";
      }

      // Adobe VMs need the match returned to produce the correct offset.
      return match;
    });
    source += "';\n";

    var argument = settings.variable;
    if (argument) {
      // Insure against third-party code injection. (CVE-2021-23358)
      if (!bareIdentifier.test(argument)) throw new Error(
        'variable is not a bare identifier: ' + argument
      );
    } else {
      // If a variable is not specified, place data values in local scope.
      source = 'with(obj||{}){\n' + source + '}\n';
      argument = 'obj';
    }

    source = "var __t,__p='',__j=Array.prototype.join," +
      "print=function(){__p+=__j.call(arguments,'');};\n" +
      source + 'return __p;\n';

    var render;
    try {
      render = new Function(argument, '_', source);
    } catch (e) {
      e.source = source;
      throw e;
    }

    var template = function(data) {
      return render.call(this, data, _$1);
    };

    // Provide the compiled source as a convenience for precompilation.
    template.source = 'function(' + argument + '){\n' + source + '}';

    return template;
  }

  // Traverses the children of `obj` along `path`. If a child is a function, it
  // is invoked with its parent as context. Returns the value of the final
  // child, or `fallback` if any child is undefined.
  function result(obj, path, fallback) {
    path = toPath(path);
    var length = path.length;
    if (!length) {
      return isFunction$1(fallback) ? fallback.call(obj) : fallback;
    }
    for (var i = 0; i < length; i++) {
      var prop = obj == null ? void 0 : obj[path[i]];
      if (prop === void 0) {
        prop = fallback;
        i = length; // Ensure we don't continue iterating.
      }
      obj = isFunction$1(prop) ? prop.call(obj) : prop;
    }
    return obj;
  }

  // Generate a unique integer id (unique within the entire client session).
  // Useful for temporary DOM ids.
  var idCounter = 0;
  function uniqueId(prefix) {
    var id = ++idCounter + '';
    return prefix ? prefix + id : id;
  }

  // Start chaining a wrapped Underscore object.
  function chain(obj) {
    var instance = _$1(obj);
    instance._chain = true;
    return instance;
  }

  // Internal function to execute `sourceFunc` bound to `context` with optional
  // `args`. Determines whether to execute a function as a constructor or as a
  // normal function.
  function executeBound(sourceFunc, boundFunc, context, callingContext, args) {
    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
    var self = baseCreate(sourceFunc.prototype);
    var result = sourceFunc.apply(self, args);
    if (isObject(result)) return result;
    return self;
  }

  // Partially apply a function by creating a version that has had some of its
  // arguments pre-filled, without changing its dynamic `this` context. `_` acts
  // as a placeholder by default, allowing any combination of arguments to be
  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
  var partial = restArguments(function(func, boundArgs) {
    var placeholder = partial.placeholder;
    var bound = function() {
      var position = 0, length = boundArgs.length;
      var args = Array(length);
      for (var i = 0; i < length; i++) {
        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
      }
      while (position < arguments.length) args.push(arguments[position++]);
      return executeBound(func, bound, this, this, args);
    };
    return bound;
  });

  partial.placeholder = _$1;

  // Create a function bound to a given object (assigning `this`, and arguments,
  // optionally).
  var bind = restArguments(function(func, context, args) {
    if (!isFunction$1(func)) throw new TypeError('Bind must be called on a function');
    var bound = restArguments(function(callArgs) {
      return executeBound(func, bound, context, this, args.concat(callArgs));
    });
    return bound;
  });

  // Internal helper for collection methods to determine whether a collection
  // should be iterated as an array or as an object.
  // Related: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
  var isArrayLike = createSizePropertyCheck(getLength);

  // Internal implementation of a recursive `flatten` function.
  function flatten$1(input, depth, strict, output) {
    output = output || [];
    if (!depth && depth !== 0) {
      depth = Infinity;
    } else if (depth <= 0) {
      return output.concat(input);
    }
    var idx = output.length;
    for (var i = 0, length = getLength(input); i < length; i++) {
      var value = input[i];
      if (isArrayLike(value) && (isArray(value) || isArguments$1(value))) {
        // Flatten current level of array or arguments object.
        if (depth > 1) {
          flatten$1(value, depth - 1, strict, output);
          idx = output.length;
        } else {
          var j = 0, len = value.length;
          while (j < len) output[idx++] = value[j++];
        }
      } else if (!strict) {
        output[idx++] = value;
      }
    }
    return output;
  }

  // Bind a number of an object's methods to that object. Remaining arguments
  // are the method names to be bound. Useful for ensuring that all callbacks
  // defined on an object belong to it.
  var bindAll = restArguments(function(obj, keys) {
    keys = flatten$1(keys, false, false);
    var index = keys.length;
    if (index < 1) throw new Error('bindAll must be passed function names');
    while (index--) {
      var key = keys[index];
      obj[key] = bind(obj[key], obj);
    }
    return obj;
  });

  // Memoize an expensive function by storing its results.
  function memoize(func, hasher) {
    var memoize = function(key) {
      var cache = memoize.cache;
      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
      if (!has$1(cache, address)) cache[address] = func.apply(this, arguments);
      return cache[address];
    };
    memoize.cache = {};
    return memoize;
  }

  // Delays a function for the given number of milliseconds, and then calls
  // it with the arguments supplied.
  var delay = restArguments(function(func, wait, args) {
    return setTimeout(function() {
      return func.apply(null, args);
    }, wait);
  });

  // Defers a function, scheduling it to run after the current call stack has
  // cleared.
  var defer = partial(delay, _$1, 1);

  // Returns a function, that, when invoked, will only be triggered at most once
  // during a given window of time. Normally, the throttled function will run
  // as much as it can, without ever going more than once per `wait` duration;
  // but if you'd like to disable the execution on the leading edge, pass
  // `{leading: false}`. To disable execution on the trailing edge, ditto.
  function throttle(func, wait, options) {
    var timeout, context, args, result;
    var previous = 0;
    if (!options) options = {};

    var later = function() {
      previous = options.leading === false ? 0 : now();
      timeout = null;
      result = func.apply(context, args);
      if (!timeout) context = args = null;
    };

    var throttled = function() {
      var _now = now();
      if (!previous && options.leading === false) previous = _now;
      var remaining = wait - (_now - previous);
      context = this;
      args = arguments;
      if (remaining <= 0 || remaining > wait) {
        if (timeout) {
          clearTimeout(timeout);
          timeout = null;
        }
        previous = _now;
        result = func.apply(context, args);
        if (!timeout) context = args = null;
      } else if (!timeout && options.trailing !== false) {
        timeout = setTimeout(later, remaining);
      }
      return result;
    };

    throttled.cancel = function() {
      clearTimeout(timeout);
      previous = 0;
      timeout = context = args = null;
    };

    return throttled;
  }

  // When a sequence of calls of the returned function ends, the argument
  // function is triggered. The end of a sequence is defined by the `wait`
  // parameter. If `immediate` is passed, the argument function will be
  // triggered at the beginning of the sequence instead of at the end.
  function debounce(func, wait, immediate) {
    var timeout, previous, args, result, context;

    var later = function() {
      var passed = now() - previous;
      if (wait > passed) {
        timeout = setTimeout(later, wait - passed);
      } else {
        timeout = null;
        if (!immediate) result = func.apply(context, args);
        // This check is needed because `func` can recursively invoke `debounced`.
        if (!timeout) args = context = null;
      }
    };

    var debounced = restArguments(function(_args) {
      context = this;
      args = _args;
      previous = now();
      if (!timeout) {
        timeout = setTimeout(later, wait);
        if (immediate) result = func.apply(context, args);
      }
      return result;
    });

    debounced.cancel = function() {
      clearTimeout(timeout);
      timeout = args = context = null;
    };

    return debounced;
  }

  // Returns the first function passed as an argument to the second,
  // allowing you to adjust arguments, run code before and after, and
  // conditionally execute the original function.
  function wrap(func, wrapper) {
    return partial(wrapper, func);
  }

  // Returns a negated version of the passed-in predicate.
  function negate(predicate) {
    return function() {
      return !predicate.apply(this, arguments);
    };
  }

  // Returns a function that is the composition of a list of functions, each
  // consuming the return value of the function that follows.
  function compose() {
    var args = arguments;
    var start = args.length - 1;
    return function() {
      var i = start;
      var result = args[start].apply(this, arguments);
      while (i--) result = args[i].call(this, result);
      return result;
    };
  }

  // Returns a function that will only be executed on and after the Nth call.
  function after(times, func) {
    return function() {
      if (--times < 1) {
        return func.apply(this, arguments);
      }
    };
  }

  // Returns a function that will only be executed up to (but not including) the
  // Nth call.
  function before(times, func) {
    var memo;
    return function() {
      if (--times > 0) {
        memo = func.apply(this, arguments);
      }
      if (times <= 1) func = null;
      return memo;
    };
  }

  // Returns a function that will be executed at most one time, no matter how
  // often you call it. Useful for lazy initialization.
  var once = partial(before, 2);

  // Returns the first key on an object that passes a truth test.
  function findKey(obj, predicate, context) {
    predicate = cb(predicate, context);
    var _keys = keys(obj), key;
    for (var i = 0, length = _keys.length; i < length; i++) {
      key = _keys[i];
      if (predicate(obj[key], key, obj)) return key;
    }
  }

  // Internal function to generate `_.findIndex` and `_.findLastIndex`.
  function createPredicateIndexFinder(dir) {
    return function(array, predicate, context) {
      predicate = cb(predicate, context);
      var length = getLength(array);
      var index = dir > 0 ? 0 : length - 1;
      for (; index >= 0 && index < length; index += dir) {
        if (predicate(array[index], index, array)) return index;
      }
      return -1;
    };
  }

  // Returns the first index on an array-like that passes a truth test.
  var findIndex = createPredicateIndexFinder(1);

  // Returns the last index on an array-like that passes a truth test.
  var findLastIndex = createPredicateIndexFinder(-1);

  // Use a comparator function to figure out the smallest index at which
  // an object should be inserted so as to maintain order. Uses binary search.
  function sortedIndex(array, obj, iteratee, context) {
    iteratee = cb(iteratee, context, 1);
    var value = iteratee(obj);
    var low = 0, high = getLength(array);
    while (low < high) {
      var mid = Math.floor((low + high) / 2);
      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
    }
    return low;
  }

  // Internal function to generate the `_.indexOf` and `_.lastIndexOf` functions.
  function createIndexFinder(dir, predicateFind, sortedIndex) {
    return function(array, item, idx) {
      var i = 0, length = getLength(array);
      if (typeof idx == 'number') {
        if (dir > 0) {
          i = idx >= 0 ? idx : Math.max(idx + length, i);
        } else {
          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
        }
      } else if (sortedIndex && idx && length) {
        idx = sortedIndex(array, item);
        return array[idx] === item ? idx : -1;
      }
      if (item !== item) {
        idx = predicateFind(slice.call(array, i, length), isNaN$1);
        return idx >= 0 ? idx + i : -1;
      }
      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
        if (array[idx] === item) return idx;
      }
      return -1;
    };
  }

  // Return the position of the first occurrence of an item in an array,
  // or -1 if the item is not included in the array.
  // If the array is large and already in sort order, pass `true`
  // for **isSorted** to use binary search.
  var indexOf = createIndexFinder(1, findIndex, sortedIndex);

  // Return the position of the last occurrence of an item in an array,
  // or -1 if the item is not included in the array.
  var lastIndexOf = createIndexFinder(-1, findLastIndex);

  // Return the first value which passes a truth test.
  function find(obj, predicate, context) {
    var keyFinder = isArrayLike(obj) ? findIndex : findKey;
    var key = keyFinder(obj, predicate, context);
    if (key !== void 0 && key !== -1) return obj[key];
  }

  // Convenience version of a common use case of `_.find`: getting the first
  // object containing specific `key:value` pairs.
  function findWhere(obj, attrs) {
    return find(obj, matcher(attrs));
  }

  // The cornerstone for collection functions, an `each`
  // implementation, aka `forEach`.
  // Handles raw objects in addition to array-likes. Treats all
  // sparse array-likes as if they were dense.
  function each(obj, iteratee, context) {
    iteratee = optimizeCb(iteratee, context);
    var i, length;
    if (isArrayLike(obj)) {
      for (i = 0, length = obj.length; i < length; i++) {
        iteratee(obj[i], i, obj);
      }
    } else {
      var _keys = keys(obj);
      for (i = 0, length = _keys.length; i < length; i++) {
        iteratee(obj[_keys[i]], _keys[i], obj);
      }
    }
    return obj;
  }

  // Return the results of applying the iteratee to each element.
  function map(obj, iteratee, context) {
    iteratee = cb(iteratee, context);
    var _keys = !isArrayLike(obj) && keys(obj),
        length = (_keys || obj).length,
        results = Array(length);
    for (var index = 0; index < length; index++) {
      var currentKey = _keys ? _keys[index] : index;
      results[index] = iteratee(obj[currentKey], currentKey, obj);
    }
    return results;
  }

  // Internal helper to create a reducing function, iterating left or right.
  function createReduce(dir) {
    // Wrap code that reassigns argument variables in a separate function than
    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
    var reducer = function(obj, iteratee, memo, initial) {
      var _keys = !isArrayLike(obj) && keys(obj),
          length = (_keys || obj).length,
          index = dir > 0 ? 0 : length - 1;
      if (!initial) {
        memo = obj[_keys ? _keys[index] : index];
        index += dir;
      }
      for (; index >= 0 && index < length; index += dir) {
        var currentKey = _keys ? _keys[index] : index;
        memo = iteratee(memo, obj[currentKey], currentKey, obj);
      }
      return memo;
    };

    return function(obj, iteratee, memo, context) {
      var initial = arguments.length >= 3;
      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
    };
  }

  // **Reduce** builds up a single result from a list of values, aka `inject`,
  // or `foldl`.
  var reduce = createReduce(1);

  // The right-associative version of reduce, also known as `foldr`.
  var reduceRight = createReduce(-1);

  // Return all the elements that pass a truth test.
  function filter(obj, predicate, context) {
    var results = [];
    predicate = cb(predicate, context);
    each(obj, function(value, index, list) {
      if (predicate(value, index, list)) results.push(value);
    });
    return results;
  }

  // Return all the elements for which a truth test fails.
  function reject(obj, predicate, context) {
    return filter(obj, negate(cb(predicate)), context);
  }

  // Determine whether all of the elements pass a truth test.
  function every(obj, predicate, context) {
    predicate = cb(predicate, context);
    var _keys = !isArrayLike(obj) && keys(obj),
        length = (_keys || obj).length;
    for (var index = 0; index < length; index++) {
      var currentKey = _keys ? _keys[index] : index;
      if (!predicate(obj[currentKey], currentKey, obj)) return false;
    }
    return true;
  }

  // Determine if at least one element in the object passes a truth test.
  function some(obj, predicate, context) {
    predicate = cb(predicate, context);
    var _keys = !isArrayLike(obj) && keys(obj),
        length = (_keys || obj).length;
    for (var index = 0; index < length; index++) {
      var currentKey = _keys ? _keys[index] : index;
      if (predicate(obj[currentKey], currentKey, obj)) return true;
    }
    return false;
  }

  // Determine if the array or object contains a given item (using `===`).
  function contains(obj, item, fromIndex, guard) {
    if (!isArrayLike(obj)) obj = values(obj);
    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
    return indexOf(obj, item, fromIndex) >= 0;
  }

  // Invoke a method (with arguments) on every item in a collection.
  var invoke = restArguments(function(obj, path, args) {
    var contextPath, func;
    if (isFunction$1(path)) {
      func = path;
    } else {
      path = toPath(path);
      contextPath = path.slice(0, -1);
      path = path[path.length - 1];
    }
    return map(obj, function(context) {
      var method = func;
      if (!method) {
        if (contextPath && contextPath.length) {
          context = deepGet(context, contextPath);
        }
        if (context == null) return void 0;
        method = context[path];
      }
      return method == null ? method : method.apply(context, args);
    });
  });

  // Convenience version of a common use case of `_.map`: fetching a property.
  function pluck(obj, key) {
    return map(obj, property(key));
  }

  // Convenience version of a common use case of `_.filter`: selecting only
  // objects containing specific `key:value` pairs.
  function where(obj, attrs) {
    return filter(obj, matcher(attrs));
  }

  // Return the maximum element (or element-based computation).
  function max(obj, iteratee, context) {
    var result = -Infinity, lastComputed = -Infinity,
        value, computed;
    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
      obj = isArrayLike(obj) ? obj : values(obj);
      for (var i = 0, length = obj.length; i < length; i++) {
        value = obj[i];
        if (value != null && value > result) {
          result = value;
        }
      }
    } else {
      iteratee = cb(iteratee, context);
      each(obj, function(v, index, list) {
        computed = iteratee(v, index, list);
        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
          result = v;
          lastComputed = computed;
        }
      });
    }
    return result;
  }

  // Return the minimum element (or element-based computation).
  function min(obj, iteratee, context) {
    var result = Infinity, lastComputed = Infinity,
        value, computed;
    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
      obj = isArrayLike(obj) ? obj : values(obj);
      for (var i = 0, length = obj.length; i < length; i++) {
        value = obj[i];
        if (value != null && value < result) {
          result = value;
        }
      }
    } else {
      iteratee = cb(iteratee, context);
      each(obj, function(v, index, list) {
        computed = iteratee(v, index, list);
        if (computed < lastComputed || computed === Infinity && result === Infinity) {
          result = v;
          lastComputed = computed;
        }
      });
    }
    return result;
  }

  // Safely create a real, live array from anything iterable.
  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
  function toArray(obj) {
    if (!obj) return [];
    if (isArray(obj)) return slice.call(obj);
    if (isString(obj)) {
      // Keep surrogate pair characters together.
      return obj.match(reStrSymbol);
    }
    if (isArrayLike(obj)) return map(obj, identity);
    return values(obj);
  }

  // Sample **n** random values from a collection using the modern version of the
  // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
  // If **n** is not specified, returns a single random element.
  // The internal `guard` argument allows it to work with `_.map`.
  function sample(obj, n, guard) {
    if (n == null || guard) {
      if (!isArrayLike(obj)) obj = values(obj);
      return obj[random(obj.length - 1)];
    }
    var sample = toArray(obj);
    var length = getLength(sample);
    n = Math.max(Math.min(n, length), 0);
    var last = length - 1;
    for (var index = 0; index < n; index++) {
      var rand = random(index, last);
      var temp = sample[index];
      sample[index] = sample[rand];
      sample[rand] = temp;
    }
    return sample.slice(0, n);
  }

  // Shuffle a collection.
  function shuffle(obj) {
    return sample(obj, Infinity);
  }

  // Sort the object's values by a criterion produced by an iteratee.
  function sortBy(obj, iteratee, context) {
    var index = 0;
    iteratee = cb(iteratee, context);
    return pluck(map(obj, function(value, key, list) {
      return {
        value: value,
        index: index++,
        criteria: iteratee(value, key, list)
      };
    }).sort(function(left, right) {
      var a = left.criteria;
      var b = right.criteria;
      if (a !== b) {
        if (a > b || a === void 0) return 1;
        if (a < b || b === void 0) return -1;
      }
      return left.index - right.index;
    }), 'value');
  }

  // An internal function used for aggregate "group by" operations.
  function group(behavior, partition) {
    return function(obj, iteratee, context) {
      var result = partition ? [[], []] : {};
      iteratee = cb(iteratee, context);
      each(obj, function(value, index) {
        var key = iteratee(value, index, obj);
        behavior(result, value, key);
      });
      return result;
    };
  }

  // Groups the object's values by a criterion. Pass either a string attribute
  // to group by, or a function that returns the criterion.
  var groupBy = group(function(result, value, key) {
    if (has$1(result, key)) result[key].push(value); else result[key] = [value];
  });

  // Indexes the object's values by a criterion, similar to `_.groupBy`, but for
  // when you know that your index values will be unique.
  var indexBy = group(function(result, value, key) {
    result[key] = value;
  });

  // Counts instances of an object that group by a certain criterion. Pass
  // either a string attribute to count by, or a function that returns the
  // criterion.
  var countBy = group(function(result, value, key) {
    if (has$1(result, key)) result[key]++; else result[key] = 1;
  });

  // Split a collection into two arrays: one whose elements all pass the given
  // truth test, and one whose elements all do not pass the truth test.
  var partition = group(function(result, value, pass) {
    result[pass ? 0 : 1].push(value);
  }, true);

  // Return the number of elements in a collection.
  function size(obj) {
    if (obj == null) return 0;
    return isArrayLike(obj) ? obj.length : keys(obj).length;
  }

  // Internal `_.pick` helper function to determine whether `key` is an enumerable
  // property name of `obj`.
  function keyInObj(value, key, obj) {
    return key in obj;
  }

  // Return a copy of the object only containing the allowed properties.
  var pick = restArguments(function(obj, keys) {
    var result = {}, iteratee = keys[0];
    if (obj == null) return result;
    if (isFunction$1(iteratee)) {
      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
      keys = allKeys(obj);
    } else {
      iteratee = keyInObj;
      keys = flatten$1(keys, false, false);
      obj = Object(obj);
    }
    for (var i = 0, length = keys.length; i < length; i++) {
      var key = keys[i];
      var value = obj[key];
      if (iteratee(value, key, obj)) result[key] = value;
    }
    return result;
  });

  // Return a copy of the object without the disallowed properties.
  var omit = restArguments(function(obj, keys) {
    var iteratee = keys[0], context;
    if (isFunction$1(iteratee)) {
      iteratee = negate(iteratee);
      if (keys.length > 1) context = keys[1];
    } else {
      keys = map(flatten$1(keys, false, false), String);
      iteratee = function(value, key) {
        return !contains(keys, key);
      };
    }
    return pick(obj, iteratee, context);
  });

  // Returns everything but the last entry of the array. Especially useful on
  // the arguments object. Passing **n** will return all the values in
  // the array, excluding the last N.
  function initial(array, n, guard) {
    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
  }

  // Get the first element of an array. Passing **n** will return the first N
  // values in the array. The **guard** check allows it to work with `_.map`.
  function first(array, n, guard) {
    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
    if (n == null || guard) return array[0];
    return initial(array, array.length - n);
  }

  // Returns everything but the first entry of the `array`. Especially useful on
  // the `arguments` object. Passing an **n** will return the rest N values in the
  // `array`.
  function rest(array, n, guard) {
    return slice.call(array, n == null || guard ? 1 : n);
  }

  // Get the last element of an array. Passing **n** will return the last N
  // values in the array.
  function last(array, n, guard) {
    if (array == null || array.length < 1) return n == null || guard ? void 0 : [];
    if (n == null || guard) return array[array.length - 1];
    return rest(array, Math.max(0, array.length - n));
  }

  // Trim out all falsy values from an array.
  function compact(array) {
    return filter(array, Boolean);
  }

  // Flatten out an array, either recursively (by default), or up to `depth`.
  // Passing `true` or `false` as `depth` means `1` or `Infinity`, respectively.
  function flatten(array, depth) {
    return flatten$1(array, depth, false);
  }

  // Take the difference between one array and a number of other arrays.
  // Only the elements present in just the first array will remain.
  var difference = restArguments(function(array, rest) {
    rest = flatten$1(rest, true, true);
    return filter(array, function(value){
      return !contains(rest, value);
    });
  });

  // Return a version of the array that does not contain the specified value(s).
  var without = restArguments(function(array, otherArrays) {
    return difference(array, otherArrays);
  });

  // Produce a duplicate-free version of the array. If the array has already
  // been sorted, you have the option of using a faster algorithm.
  // The faster algorithm will not work with an iteratee if the iteratee
  // is not a one-to-one function, so providing an iteratee will disable
  // the faster algorithm.
  function uniq(array, isSorted, iteratee, context) {
    if (!isBoolean(isSorted)) {
      context = iteratee;
      iteratee = isSorted;
      isSorted = false;
    }
    if (iteratee != null) iteratee = cb(iteratee, context);
    var result = [];
    var seen = [];
    for (var i = 0, length = getLength(array); i < length; i++) {
      var value = array[i],
          computed = iteratee ? iteratee(value, i, array) : value;
      if (isSorted && !iteratee) {
        if (!i || seen !== computed) result.push(value);
        seen = computed;
      } else if (iteratee) {
        if (!contains(seen, computed)) {
          seen.push(computed);
          result.push(value);
        }
      } else if (!contains(result, value)) {
        result.push(value);
      }
    }
    return result;
  }

  // Produce an array that contains the union: each distinct element from all of
  // the passed-in arrays.
  var union = restArguments(function(arrays) {
    return uniq(flatten$1(arrays, true, true));
  });

  // Produce an array that contains every item shared between all the
  // passed-in arrays.
  function intersection(array) {
    var result = [];
    var argsLength = arguments.length;
    for (var i = 0, length = getLength(array); i < length; i++) {
      var item = array[i];
      if (contains(result, item)) continue;
      var j;
      for (j = 1; j < argsLength; j++) {
        if (!contains(arguments[j], item)) break;
      }
      if (j === argsLength) result.push(item);
    }
    return result;
  }

  // Complement of zip. Unzip accepts an array of arrays and groups
  // each array's elements on shared indices.
  function unzip(array) {
    var length = array && max(array, getLength).length || 0;
    var result = Array(length);

    for (var index = 0; index < length; index++) {
      result[index] = pluck(array, index);
    }
    return result;
  }

  // Zip together multiple lists into a single array -- elements that share
  // an index go together.
  var zip = restArguments(unzip);

  // Converts lists into objects. Pass either a single array of `[key, value]`
  // pairs, or two parallel arrays of the same length -- one of keys, and one of
  // the corresponding values. Passing by pairs is the reverse of `_.pairs`.
  function object(list, values) {
    var result = {};
    for (var i = 0, length = getLength(list); i < length; i++) {
      if (values) {
        result[list[i]] = values[i];
      } else {
        result[list[i][0]] = list[i][1];
      }
    }
    return result;
  }

  // Generate an integer Array containing an arithmetic progression. A port of
  // the native Python `range()` function. See
  // [the Python documentation](https://docs.python.org/library/functions.html#range).
  function range(start, stop, step) {
    if (stop == null) {
      stop = start || 0;
      start = 0;
    }
    if (!step) {
      step = stop < start ? -1 : 1;
    }

    var length = Math.max(Math.ceil((stop - start) / step), 0);
    var range = Array(length);

    for (var idx = 0; idx < length; idx++, start += step) {
      range[idx] = start;
    }

    return range;
  }

  // Chunk a single array into multiple arrays, each containing `count` or fewer
  // items.
  function chunk(array, count) {
    if (count == null || count < 1) return [];
    var result = [];
    var i = 0, length = array.length;
    while (i < length) {
      result.push(slice.call(array, i, i += count));
    }
    return result;
  }

  // Helper function to continue chaining intermediate results.
  function chainResult(instance, obj) {
    return instance._chain ? _$1(obj).chain() : obj;
  }

  // Add your own custom functions to the Underscore object.
  function mixin(obj) {
    each(functions(obj), function(name) {
      var func = _$1[name] = obj[name];
      _$1.prototype[name] = function() {
        var args = [this._wrapped];
        push.apply(args, arguments);
        return chainResult(this, func.apply(_$1, args));
      };
    });
    return _$1;
  }

  // Add all mutator `Array` functions to the wrapper.
  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
    var method = ArrayProto[name];
    _$1.prototype[name] = function() {
      var obj = this._wrapped;
      if (obj != null) {
        method.apply(obj, arguments);
        if ((name === 'shift' || name === 'splice') && obj.length === 0) {
          delete obj[0];
        }
      }
      return chainResult(this, obj);
    };
  });

  // Add all accessor `Array` functions to the wrapper.
  each(['concat', 'join', 'slice'], function(name) {
    var method = ArrayProto[name];
    _$1.prototype[name] = function() {
      var obj = this._wrapped;
      if (obj != null) obj = method.apply(obj, arguments);
      return chainResult(this, obj);
    };
  });

  // Named Exports

  var allExports = {
    __proto__: null,
    VERSION: VERSION,
    restArguments: restArguments,
    isObject: isObject,
    isNull: isNull,
    isUndefined: isUndefined,
    isBoolean: isBoolean,
    isElement: isElement,
    isString: isString,
    isNumber: isNumber,
    isDate: isDate,
    isRegExp: isRegExp,
    isError: isError,
    isSymbol: isSymbol,
    isArrayBuffer: isArrayBuffer,
    isDataView: isDataView$1,
    isArray: isArray,
    isFunction: isFunction$1,
    isArguments: isArguments$1,
    isFinite: isFinite$1,
    isNaN: isNaN$1,
    isTypedArray: isTypedArray$1,
    isEmpty: isEmpty,
    isMatch: isMatch,
    isEqual: isEqual,
    isMap: isMap,
    isWeakMap: isWeakMap,
    isSet: isSet,
    isWeakSet: isWeakSet,
    keys: keys,
    allKeys: allKeys,
    values: values,
    pairs: pairs,
    invert: invert,
    functions: functions,
    methods: functions,
    extend: extend,
    extendOwn: extendOwn,
    assign: extendOwn,
    defaults: defaults,
    create: create,
    clone: clone,
    tap: tap,
    get: get,
    has: has,
    mapObject: mapObject,
    identity: identity,
    constant: constant,
    noop: noop,
    toPath: toPath$1,
    property: property,
    propertyOf: propertyOf,
    matcher: matcher,
    matches: matcher,
    times: times,
    random: random,
    now: now,
    escape: _escape,
    unescape: _unescape,
    templateSettings: templateSettings,
    template: template,
    result: result,
    uniqueId: uniqueId,
    chain: chain,
    iteratee: iteratee,
    partial: partial,
    bind: bind,
    bindAll: bindAll,
    memoize: memoize,
    delay: delay,
    defer: defer,
    throttle: throttle,
    debounce: debounce,
    wrap: wrap,
    negate: negate,
    compose: compose,
    after: after,
    before: before,
    once: once,
    findKey: findKey,
    findIndex: findIndex,
    findLastIndex: findLastIndex,
    sortedIndex: sortedIndex,
    indexOf: indexOf,
    lastIndexOf: lastIndexOf,
    find: find,
    detect: find,
    findWhere: findWhere,
    each: each,
    forEach: each,
    map: map,
    collect: map,
    reduce: reduce,
    foldl: reduce,
    inject: reduce,
    reduceRight: reduceRight,
    foldr: reduceRight,
    filter: filter,
    select: filter,
    reject: reject,
    every: every,
    all: every,
    some: some,
    any: some,
    contains: contains,
    includes: contains,
    include: contains,
    invoke: invoke,
    pluck: pluck,
    where: where,
    max: max,
    min: min,
    shuffle: shuffle,
    sample: sample,
    sortBy: sortBy,
    groupBy: groupBy,
    indexBy: indexBy,
    countBy: countBy,
    partition: partition,
    toArray: toArray,
    size: size,
    pick: pick,
    omit: omit,
    first: first,
    head: first,
    take: first,
    initial: initial,
    last: last,
    rest: rest,
    tail: rest,
    drop: rest,
    compact: compact,
    flatten: flatten,
    without: without,
    uniq: uniq,
    unique: uniq,
    union: union,
    intersection: intersection,
    difference: difference,
    unzip: unzip,
    transpose: unzip,
    zip: zip,
    object: object,
    range: range,
    chunk: chunk,
    mixin: mixin,
    'default': _$1
  };

  // Default Export

  // Add all of the Underscore functions to the wrapper object.
  var _ = mixin(allExports);
  // Legacy Node.js API.
  _._ = _;

  return _;

})));


}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],4:[function(require,module,exports){
(function (global){(function (){
'use strict';

var possibleNames = [
	'BigInt64Array',
	'BigUint64Array',
	'Float32Array',
	'Float64Array',
	'Int16Array',
	'Int32Array',
	'Int8Array',
	'Uint16Array',
	'Uint32Array',
	'Uint8Array',
	'Uint8ClampedArray'
];

module.exports = function availableTypedArrays() {
	var out = [];
	for (var i = 0; i < possibleNames.length; i++) {
		if (typeof global[possibleNames[i]] === 'function') {
			out[out.length] = possibleNames[i];
		}
	}
	return out;
};

}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{}],5:[function(require,module,exports){
'use strict'

exports.byteLength = byteLength
exports.toByteArray = toByteArray
exports.fromByteArray = fromByteArray

var lookup = []
var revLookup = []
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array

var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
for (var i = 0, len = code.length; i < len; ++i) {
  lookup[i] = code[i]
  revLookup[code.charCodeAt(i)] = i
}

// Support decoding URL-safe base64 strings, as Node.js does.
// See: https://en.wikipedia.org/wiki/Base64#URL_applications
revLookup['-'.charCodeAt(0)] = 62
revLookup['_'.charCodeAt(0)] = 63

function getLens (b64) {
  var len = b64.length

  if (len % 4 > 0) {
    throw new Error('Invalid string. Length must be a multiple of 4')
  }

  // Trim off extra bytes after placeholder bytes are found
  // See: https://github.com/beatgammit/base64-js/issues/42
  var validLen = b64.indexOf('=')
  if (validLen === -1) validLen = len

  var placeHoldersLen = validLen === len
    ? 0
    : 4 - (validLen % 4)

  return [validLen, placeHoldersLen]
}

// base64 is 4/3 + up to two characters of the original data
function byteLength (b64) {
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function _byteLength (b64, validLen, placeHoldersLen) {
  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
}

function toByteArray (b64) {
  var tmp
  var lens = getLens(b64)
  var validLen = lens[0]
  var placeHoldersLen = lens[1]

  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))

  var curByte = 0

  // if there are placeholders, only get up to the last complete 4 chars
  var len = placeHoldersLen > 0
    ? validLen - 4
    : validLen

  var i
  for (i = 0; i < len; i += 4) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 18) |
      (revLookup[b64.charCodeAt(i + 1)] << 12) |
      (revLookup[b64.charCodeAt(i + 2)] << 6) |
      revLookup[b64.charCodeAt(i + 3)]
    arr[curByte++] = (tmp >> 16) & 0xFF
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 2) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 2) |
      (revLookup[b64.charCodeAt(i + 1)] >> 4)
    arr[curByte++] = tmp & 0xFF
  }

  if (placeHoldersLen === 1) {
    tmp =
      (revLookup[b64.charCodeAt(i)] << 10) |
      (revLookup[b64.charCodeAt(i + 1)] << 4) |
      (revLookup[b64.charCodeAt(i + 2)] >> 2)
    arr[curByte++] = (tmp >> 8) & 0xFF
    arr[curByte++] = tmp & 0xFF
  }

  return arr
}

function tripletToBase64 (num) {
  return lookup[num >> 18 & 0x3F] +
    lookup[num >> 12 & 0x3F] +
    lookup[num >> 6 & 0x3F] +
    lookup[num & 0x3F]
}

function encodeChunk (uint8, start, end) {
  var tmp
  var output = []
  for (var i = start; i < end; i += 3) {
    tmp =
      ((uint8[i] << 16) & 0xFF0000) +
      ((uint8[i + 1] << 8) & 0xFF00) +
      (uint8[i + 2] & 0xFF)
    output.push(tripletToBase64(tmp))
  }
  return output.join('')
}

function fromByteArray (uint8) {
  var tmp
  var len = uint8.length
  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
  var parts = []
  var maxChunkLength = 16383 // must be multiple of 3

  // go through the array every three bytes, we'll deal with trailing stuff later
  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
  }

  // pad the end with zeros, but make sure to not forget the extra bytes
  if (extraBytes === 1) {
    tmp = uint8[len - 1]
    parts.push(
      lookup[tmp >> 2] +
      lookup[(tmp << 4) & 0x3F] +
      '=='
    )
  } else if (extraBytes === 2) {
    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
    parts.push(
      lookup[tmp >> 10] +
      lookup[(tmp >> 4) & 0x3F] +
      lookup[(tmp << 2) & 0x3F] +
      '='
    )
  }

  return parts.join('')
}

},{}],6:[function(require,module,exports){
(function (Buffer){(function (){
/*!
 * The buffer module from node.js, for the browser.
 *
 * @author   Feross Aboukhadijeh <https://feross.org>
 * @license  MIT
 */
/* eslint-disable no-proto */

'use strict'

var base64 = require('base64-js')
var ieee754 = require('ieee754')

exports.Buffer = Buffer
exports.SlowBuffer = SlowBuffer
exports.INSPECT_MAX_BYTES = 50

var K_MAX_LENGTH = 0x7fffffff
exports.kMaxLength = K_MAX_LENGTH

/**
 * If `Buffer.TYPED_ARRAY_SUPPORT`:
 *   === true    Use Uint8Array implementation (fastest)
 *   === false   Print warning and recommend using `buffer` v4.x which has an Object
 *               implementation (most compatible, even IE6)
 *
 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
 * Opera 11.6+, iOS 4.2+.
 *
 * We report that the browser does not support typed arrays if the are not subclassable
 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
 * for __proto__ and has a buggy typed array implementation.
 */
Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()

if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
    typeof console.error === 'function') {
  console.error(
    'This browser lacks typed array (Uint8Array) support which is required by ' +
    '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
  )
}

function typedArraySupport () {
  // Can typed array instances can be augmented?
  try {
    var arr = new Uint8Array(1)
    arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }
    return arr.foo() === 42
  } catch (e) {
    return false
  }
}

Object.defineProperty(Buffer.prototype, 'parent', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.buffer
  }
})

Object.defineProperty(Buffer.prototype, 'offset', {
  enumerable: true,
  get: function () {
    if (!Buffer.isBuffer(this)) return undefined
    return this.byteOffset
  }
})

function createBuffer (length) {
  if (length > K_MAX_LENGTH) {
    throw new RangeError('The value "' + length + '" is invalid for option "size"')
  }
  // Return an augmented `Uint8Array` instance
  var buf = new Uint8Array(length)
  buf.__proto__ = Buffer.prototype
  return buf
}

/**
 * The Buffer constructor returns instances of `Uint8Array` that have their
 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
 * returns a single octet.
 *
 * The `Uint8Array` prototype remains unmodified.
 */

function Buffer (arg, encodingOrOffset, length) {
  // Common case.
  if (typeof arg === 'number') {
    if (typeof encodingOrOffset === 'string') {
      throw new TypeError(
        'The "string" argument must be of type string. Received type number'
      )
    }
    return allocUnsafe(arg)
  }
  return from(arg, encodingOrOffset, length)
}

// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
if (typeof Symbol !== 'undefined' && Symbol.species != null &&
    Buffer[Symbol.species] === Buffer) {
  Object.defineProperty(Buffer, Symbol.species, {
    value: null,
    configurable: true,
    enumerable: false,
    writable: false
  })
}

Buffer.poolSize = 8192 // not used by this implementation

function from (value, encodingOrOffset, length) {
  if (typeof value === 'string') {
    return fromString(value, encodingOrOffset)
  }

  if (ArrayBuffer.isView(value)) {
    return fromArrayLike(value)
  }

  if (value == null) {
    throw TypeError(
      'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
      'or Array-like Object. Received type ' + (typeof value)
    )
  }

  if (isInstance(value, ArrayBuffer) ||
      (value && isInstance(value.buffer, ArrayBuffer))) {
    return fromArrayBuffer(value, encodingOrOffset, length)
  }

  if (typeof value === 'number') {
    throw new TypeError(
      'The "value" argument must not be of type number. Received type number'
    )
  }

  var valueOf = value.valueOf && value.valueOf()
  if (valueOf != null && valueOf !== value) {
    return Buffer.from(valueOf, encodingOrOffset, length)
  }

  var b = fromObject(value)
  if (b) return b

  if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
      typeof value[Symbol.toPrimitive] === 'function') {
    return Buffer.from(
      value[Symbol.toPrimitive]('string'), encodingOrOffset, length
    )
  }

  throw new TypeError(
    'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
    'or Array-like Object. Received type ' + (typeof value)
  )
}

/**
 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
 * if value is a number.
 * Buffer.from(str[, encoding])
 * Buffer.from(array)
 * Buffer.from(buffer)
 * Buffer.from(arrayBuffer[, byteOffset[, length]])
 **/
Buffer.from = function (value, encodingOrOffset, length) {
  return from(value, encodingOrOffset, length)
}

// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
// https://github.com/feross/buffer/pull/148
Buffer.prototype.__proto__ = Uint8Array.prototype
Buffer.__proto__ = Uint8Array

function assertSize (size) {
  if (typeof size !== 'number') {
    throw new TypeError('"size" argument must be of type number')
  } else if (size < 0) {
    throw new RangeError('The value "' + size + '" is invalid for option "size"')
  }
}

function alloc (size, fill, encoding) {
  assertSize(size)
  if (size <= 0) {
    return createBuffer(size)
  }
  if (fill !== undefined) {
    // Only pay attention to encoding if it's a string. This
    // prevents accidentally sending in a number that would
    // be interpretted as a start offset.
    return typeof encoding === 'string'
      ? createBuffer(size).fill(fill, encoding)
      : createBuffer(size).fill(fill)
  }
  return createBuffer(size)
}

/**
 * Creates a new filled Buffer instance.
 * alloc(size[, fill[, encoding]])
 **/
Buffer.alloc = function (size, fill, encoding) {
  return alloc(size, fill, encoding)
}

function allocUnsafe (size) {
  assertSize(size)
  return createBuffer(size < 0 ? 0 : checked(size) | 0)
}

/**
 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
 * */
Buffer.allocUnsafe = function (size) {
  return allocUnsafe(size)
}
/**
 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
 */
Buffer.allocUnsafeSlow = function (size) {
  return allocUnsafe(size)
}

function fromString (string, encoding) {
  if (typeof encoding !== 'string' || encoding === '') {
    encoding = 'utf8'
  }

  if (!Buffer.isEncoding(encoding)) {
    throw new TypeError('Unknown encoding: ' + encoding)
  }

  var length = byteLength(string, encoding) | 0
  var buf = createBuffer(length)

  var actual = buf.write(string, encoding)

  if (actual !== length) {
    // Writing a hex string, for example, that contains invalid characters will
    // cause everything after the first invalid character to be ignored. (e.g.
    // 'abxxcd' will be treated as 'ab')
    buf = buf.slice(0, actual)
  }

  return buf
}

function fromArrayLike (array) {
  var length = array.length < 0 ? 0 : checked(array.length) | 0
  var buf = createBuffer(length)
  for (var i = 0; i < length; i += 1) {
    buf[i] = array[i] & 255
  }
  return buf
}

function fromArrayBuffer (array, byteOffset, length) {
  if (byteOffset < 0 || array.byteLength < byteOffset) {
    throw new RangeError('"offset" is outside of buffer bounds')
  }

  if (array.byteLength < byteOffset + (length || 0)) {
    throw new RangeError('"length" is outside of buffer bounds')
  }

  var buf
  if (byteOffset === undefined && length === undefined) {
    buf = new Uint8Array(array)
  } else if (length === undefined) {
    buf = new Uint8Array(array, byteOffset)
  } else {
    buf = new Uint8Array(array, byteOffset, length)
  }

  // Return an augmented `Uint8Array` instance
  buf.__proto__ = Buffer.prototype
  return buf
}

function fromObject (obj) {
  if (Buffer.isBuffer(obj)) {
    var len = checked(obj.length) | 0
    var buf = createBuffer(len)

    if (buf.length === 0) {
      return buf
    }

    obj.copy(buf, 0, 0, len)
    return buf
  }

  if (obj.length !== undefined) {
    if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
      return createBuffer(0)
    }
    return fromArrayLike(obj)
  }

  if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
    return fromArrayLike(obj.data)
  }
}

function checked (length) {
  // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
  // length is NaN (which is otherwise coerced to zero.)
  if (length >= K_MAX_LENGTH) {
    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
                         'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
  }
  return length | 0
}

function SlowBuffer (length) {
  if (+length != length) { // eslint-disable-line eqeqeq
    length = 0
  }
  return Buffer.alloc(+length)
}

Buffer.isBuffer = function isBuffer (b) {
  return b != null && b._isBuffer === true &&
    b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
}

Buffer.compare = function compare (a, b) {
  if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
  if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
    throw new TypeError(
      'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
    )
  }

  if (a === b) return 0

  var x = a.length
  var y = b.length

  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
    if (a[i] !== b[i]) {
      x = a[i]
      y = b[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

Buffer.isEncoding = function isEncoding (encoding) {
  switch (String(encoding).toLowerCase()) {
    case 'hex':
    case 'utf8':
    case 'utf-8':
    case 'ascii':
    case 'latin1':
    case 'binary':
    case 'base64':
    case 'ucs2':
    case 'ucs-2':
    case 'utf16le':
    case 'utf-16le':
      return true
    default:
      return false
  }
}

Buffer.concat = function concat (list, length) {
  if (!Array.isArray(list)) {
    throw new TypeError('"list" argument must be an Array of Buffers')
  }

  if (list.length === 0) {
    return Buffer.alloc(0)
  }

  var i
  if (length === undefined) {
    length = 0
    for (i = 0; i < list.length; ++i) {
      length += list[i].length
    }
  }

  var buffer = Buffer.allocUnsafe(length)
  var pos = 0
  for (i = 0; i < list.length; ++i) {
    var buf = list[i]
    if (isInstance(buf, Uint8Array)) {
      buf = Buffer.from(buf)
    }
    if (!Buffer.isBuffer(buf)) {
      throw new TypeError('"list" argument must be an Array of Buffers')
    }
    buf.copy(buffer, pos)
    pos += buf.length
  }
  return buffer
}

function byteLength (string, encoding) {
  if (Buffer.isBuffer(string)) {
    return string.length
  }
  if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
    return string.byteLength
  }
  if (typeof string !== 'string') {
    throw new TypeError(
      'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
      'Received type ' + typeof string
    )
  }

  var len = string.length
  var mustMatch = (arguments.length > 2 && arguments[2] === true)
  if (!mustMatch && len === 0) return 0

  // Use a for loop to avoid recursion
  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'ascii':
      case 'latin1':
      case 'binary':
        return len
      case 'utf8':
      case 'utf-8':
        return utf8ToBytes(string).length
      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return len * 2
      case 'hex':
        return len >>> 1
      case 'base64':
        return base64ToBytes(string).length
      default:
        if (loweredCase) {
          return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
        }
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}
Buffer.byteLength = byteLength

function slowToString (encoding, start, end) {
  var loweredCase = false

  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
  // property of a typed array.

  // This behaves neither like String nor Uint8Array in that we set start/end
  // to their upper/lower bounds if the value passed is out of range.
  // undefined is handled specially as per ECMA-262 6th Edition,
  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
  if (start === undefined || start < 0) {
    start = 0
  }
  // Return early if start > this.length. Done here to prevent potential uint32
  // coercion fail below.
  if (start > this.length) {
    return ''
  }

  if (end === undefined || end > this.length) {
    end = this.length
  }

  if (end <= 0) {
    return ''
  }

  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
  end >>>= 0
  start >>>= 0

  if (end <= start) {
    return ''
  }

  if (!encoding) encoding = 'utf8'

  while (true) {
    switch (encoding) {
      case 'hex':
        return hexSlice(this, start, end)

      case 'utf8':
      case 'utf-8':
        return utf8Slice(this, start, end)

      case 'ascii':
        return asciiSlice(this, start, end)

      case 'latin1':
      case 'binary':
        return latin1Slice(this, start, end)

      case 'base64':
        return base64Slice(this, start, end)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return utf16leSlice(this, start, end)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = (encoding + '').toLowerCase()
        loweredCase = true
    }
  }
}

// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
// reliably in a browserify context because there could be multiple different
// copies of the 'buffer' package in use. This method works even for Buffer
// instances that were created from another copy of the `buffer` package.
// See: https://github.com/feross/buffer/issues/154
Buffer.prototype._isBuffer = true

function swap (b, n, m) {
  var i = b[n]
  b[n] = b[m]
  b[m] = i
}

Buffer.prototype.swap16 = function swap16 () {
  var len = this.length
  if (len % 2 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 16-bits')
  }
  for (var i = 0; i < len; i += 2) {
    swap(this, i, i + 1)
  }
  return this
}

Buffer.prototype.swap32 = function swap32 () {
  var len = this.length
  if (len % 4 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 32-bits')
  }
  for (var i = 0; i < len; i += 4) {
    swap(this, i, i + 3)
    swap(this, i + 1, i + 2)
  }
  return this
}

Buffer.prototype.swap64 = function swap64 () {
  var len = this.length
  if (len % 8 !== 0) {
    throw new RangeError('Buffer size must be a multiple of 64-bits')
  }
  for (var i = 0; i < len; i += 8) {
    swap(this, i, i + 7)
    swap(this, i + 1, i + 6)
    swap(this, i + 2, i + 5)
    swap(this, i + 3, i + 4)
  }
  return this
}

Buffer.prototype.toString = function toString () {
  var length = this.length
  if (length === 0) return ''
  if (arguments.length === 0) return utf8Slice(this, 0, length)
  return slowToString.apply(this, arguments)
}

Buffer.prototype.toLocaleString = Buffer.prototype.toString

Buffer.prototype.equals = function equals (b) {
  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
  if (this === b) return true
  return Buffer.compare(this, b) === 0
}

Buffer.prototype.inspect = function inspect () {
  var str = ''
  var max = exports.INSPECT_MAX_BYTES
  str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
  if (this.length > max) str += ' ... '
  return '<Buffer ' + str + '>'
}

Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
  if (isInstance(target, Uint8Array)) {
    target = Buffer.from(target, target.offset, target.byteLength)
  }
  if (!Buffer.isBuffer(target)) {
    throw new TypeError(
      'The "target" argument must be one of type Buffer or Uint8Array. ' +
      'Received type ' + (typeof target)
    )
  }

  if (start === undefined) {
    start = 0
  }
  if (end === undefined) {
    end = target ? target.length : 0
  }
  if (thisStart === undefined) {
    thisStart = 0
  }
  if (thisEnd === undefined) {
    thisEnd = this.length
  }

  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
    throw new RangeError('out of range index')
  }

  if (thisStart >= thisEnd && start >= end) {
    return 0
  }
  if (thisStart >= thisEnd) {
    return -1
  }
  if (start >= end) {
    return 1
  }

  start >>>= 0
  end >>>= 0
  thisStart >>>= 0
  thisEnd >>>= 0

  if (this === target) return 0

  var x = thisEnd - thisStart
  var y = end - start
  var len = Math.min(x, y)

  var thisCopy = this.slice(thisStart, thisEnd)
  var targetCopy = target.slice(start, end)

  for (var i = 0; i < len; ++i) {
    if (thisCopy[i] !== targetCopy[i]) {
      x = thisCopy[i]
      y = targetCopy[i]
      break
    }
  }

  if (x < y) return -1
  if (y < x) return 1
  return 0
}

// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
//
// Arguments:
// - buffer - a Buffer to search
// - val - a string, Buffer, or number
// - byteOffset - an index into `buffer`; will be clamped to an int32
// - encoding - an optional encoding, relevant is val is a string
// - dir - true for indexOf, false for lastIndexOf
function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
  // Empty buffer means no match
  if (buffer.length === 0) return -1

  // Normalize byteOffset
  if (typeof byteOffset === 'string') {
    encoding = byteOffset
    byteOffset = 0
  } else if (byteOffset > 0x7fffffff) {
    byteOffset = 0x7fffffff
  } else if (byteOffset < -0x80000000) {
    byteOffset = -0x80000000
  }
  byteOffset = +byteOffset // Coerce to Number.
  if (numberIsNaN(byteOffset)) {
    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
    byteOffset = dir ? 0 : (buffer.length - 1)
  }

  // Normalize byteOffset: negative offsets start from the end of the buffer
  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
  if (byteOffset >= buffer.length) {
    if (dir) return -1
    else byteOffset = buffer.length - 1
  } else if (byteOffset < 0) {
    if (dir) byteOffset = 0
    else return -1
  }

  // Normalize val
  if (typeof val === 'string') {
    val = Buffer.from(val, encoding)
  }

  // Finally, search either indexOf (if dir is true) or lastIndexOf
  if (Buffer.isBuffer(val)) {
    // Special case: looking for empty string/buffer always fails
    if (val.length === 0) {
      return -1
    }
    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
  } else if (typeof val === 'number') {
    val = val & 0xFF // Search for a byte value [0-255]
    if (typeof Uint8Array.prototype.indexOf === 'function') {
      if (dir) {
        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
      } else {
        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
      }
    }
    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
  }

  throw new TypeError('val must be string, number or Buffer')
}

function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
  var indexSize = 1
  var arrLength = arr.length
  var valLength = val.length

  if (encoding !== undefined) {
    encoding = String(encoding).toLowerCase()
    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
        encoding === 'utf16le' || encoding === 'utf-16le') {
      if (arr.length < 2 || val.length < 2) {
        return -1
      }
      indexSize = 2
      arrLength /= 2
      valLength /= 2
      byteOffset /= 2
    }
  }

  function read (buf, i) {
    if (indexSize === 1) {
      return buf[i]
    } else {
      return buf.readUInt16BE(i * indexSize)
    }
  }

  var i
  if (dir) {
    var foundIndex = -1
    for (i = byteOffset; i < arrLength; i++) {
      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
        if (foundIndex === -1) foundIndex = i
        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
      } else {
        if (foundIndex !== -1) i -= i - foundIndex
        foundIndex = -1
      }
    }
  } else {
    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
    for (i = byteOffset; i >= 0; i--) {
      var found = true
      for (var j = 0; j < valLength; j++) {
        if (read(arr, i + j) !== read(val, j)) {
          found = false
          break
        }
      }
      if (found) return i
    }
  }

  return -1
}

Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
  return this.indexOf(val, byteOffset, encoding) !== -1
}

Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
}

Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
}

function hexWrite (buf, string, offset, length) {
  offset = Number(offset) || 0
  var remaining = buf.length - offset
  if (!length) {
    length = remaining
  } else {
    length = Number(length)
    if (length > remaining) {
      length = remaining
    }
  }

  var strLen = string.length

  if (length > strLen / 2) {
    length = strLen / 2
  }
  for (var i = 0; i < length; ++i) {
    var parsed = parseInt(string.substr(i * 2, 2), 16)
    if (numberIsNaN(parsed)) return i
    buf[offset + i] = parsed
  }
  return i
}

function utf8Write (buf, string, offset, length) {
  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
}

function asciiWrite (buf, string, offset, length) {
  return blitBuffer(asciiToBytes(string), buf, offset, length)
}

function latin1Write (buf, string, offset, length) {
  return asciiWrite(buf, string, offset, length)
}

function base64Write (buf, string, offset, length) {
  return blitBuffer(base64ToBytes(string), buf, offset, length)
}

function ucs2Write (buf, string, offset, length) {
  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
}

Buffer.prototype.write = function write (string, offset, length, encoding) {
  // Buffer#write(string)
  if (offset === undefined) {
    encoding = 'utf8'
    length = this.length
    offset = 0
  // Buffer#write(string, encoding)
  } else if (length === undefined && typeof offset === 'string') {
    encoding = offset
    length = this.length
    offset = 0
  // Buffer#write(string, offset[, length][, encoding])
  } else if (isFinite(offset)) {
    offset = offset >>> 0
    if (isFinite(length)) {
      length = length >>> 0
      if (encoding === undefined) encoding = 'utf8'
    } else {
      encoding = length
      length = undefined
    }
  } else {
    throw new Error(
      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
    )
  }

  var remaining = this.length - offset
  if (length === undefined || length > remaining) length = remaining

  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
    throw new RangeError('Attempt to write outside buffer bounds')
  }

  if (!encoding) encoding = 'utf8'

  var loweredCase = false
  for (;;) {
    switch (encoding) {
      case 'hex':
        return hexWrite(this, string, offset, length)

      case 'utf8':
      case 'utf-8':
        return utf8Write(this, string, offset, length)

      case 'ascii':
        return asciiWrite(this, string, offset, length)

      case 'latin1':
      case 'binary':
        return latin1Write(this, string, offset, length)

      case 'base64':
        // Warning: maxLength not taken into account in base64Write
        return base64Write(this, string, offset, length)

      case 'ucs2':
      case 'ucs-2':
      case 'utf16le':
      case 'utf-16le':
        return ucs2Write(this, string, offset, length)

      default:
        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
        encoding = ('' + encoding).toLowerCase()
        loweredCase = true
    }
  }
}

Buffer.prototype.toJSON = function toJSON () {
  return {
    type: 'Buffer',
    data: Array.prototype.slice.call(this._arr || this, 0)
  }
}

function base64Slice (buf, start, end) {
  if (start === 0 && end === buf.length) {
    return base64.fromByteArray(buf)
  } else {
    return base64.fromByteArray(buf.slice(start, end))
  }
}

function utf8Slice (buf, start, end) {
  end = Math.min(buf.length, end)
  var res = []

  var i = start
  while (i < end) {
    var firstByte = buf[i]
    var codePoint = null
    var bytesPerSequence = (firstByte > 0xEF) ? 4
      : (firstByte > 0xDF) ? 3
        : (firstByte > 0xBF) ? 2
          : 1

    if (i + bytesPerSequence <= end) {
      var secondByte, thirdByte, fourthByte, tempCodePoint

      switch (bytesPerSequence) {
        case 1:
          if (firstByte < 0x80) {
            codePoint = firstByte
          }
          break
        case 2:
          secondByte = buf[i + 1]
          if ((secondByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
            if (tempCodePoint > 0x7F) {
              codePoint = tempCodePoint
            }
          }
          break
        case 3:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
              codePoint = tempCodePoint
            }
          }
          break
        case 4:
          secondByte = buf[i + 1]
          thirdByte = buf[i + 2]
          fourthByte = buf[i + 3]
          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
              codePoint = tempCodePoint
            }
          }
      }
    }

    if (codePoint === null) {
      // we did not generate a valid codePoint so insert a
      // replacement char (U+FFFD) and advance only 1 byte
      codePoint = 0xFFFD
      bytesPerSequence = 1
    } else if (codePoint > 0xFFFF) {
      // encode to utf16 (surrogate pair dance)
      codePoint -= 0x10000
      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
      codePoint = 0xDC00 | codePoint & 0x3FF
    }

    res.push(codePoint)
    i += bytesPerSequence
  }

  return decodeCodePointsArray(res)
}

// Based on http://stackoverflow.com/a/22747272/680742, the browser with
// the lowest limit is Chrome, with 0x10000 args.
// We go 1 magnitude less, for safety
var MAX_ARGUMENTS_LENGTH = 0x1000

function decodeCodePointsArray (codePoints) {
  var len = codePoints.length
  if (len <= MAX_ARGUMENTS_LENGTH) {
    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
  }

  // Decode in chunks to avoid "call stack size exceeded".
  var res = ''
  var i = 0
  while (i < len) {
    res += String.fromCharCode.apply(
      String,
      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
    )
  }
  return res
}

function asciiSlice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i] & 0x7F)
  }
  return ret
}

function latin1Slice (buf, start, end) {
  var ret = ''
  end = Math.min(buf.length, end)

  for (var i = start; i < end; ++i) {
    ret += String.fromCharCode(buf[i])
  }
  return ret
}

function hexSlice (buf, start, end) {
  var len = buf.length

  if (!start || start < 0) start = 0
  if (!end || end < 0 || end > len) end = len

  var out = ''
  for (var i = start; i < end; ++i) {
    out += toHex(buf[i])
  }
  return out
}

function utf16leSlice (buf, start, end) {
  var bytes = buf.slice(start, end)
  var res = ''
  for (var i = 0; i < bytes.length; i += 2) {
    res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
  }
  return res
}

Buffer.prototype.slice = function slice (start, end) {
  var len = this.length
  start = ~~start
  end = end === undefined ? len : ~~end

  if (start < 0) {
    start += len
    if (start < 0) start = 0
  } else if (start > len) {
    start = len
  }

  if (end < 0) {
    end += len
    if (end < 0) end = 0
  } else if (end > len) {
    end = len
  }

  if (end < start) end = start

  var newBuf = this.subarray(start, end)
  // Return an augmented `Uint8Array` instance
  newBuf.__proto__ = Buffer.prototype
  return newBuf
}

/*
 * Need to make sure that buffer isn't trying to write out of bounds.
 */
function checkOffset (offset, ext, length) {
  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
}

Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }

  return val
}

Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    checkOffset(offset, byteLength, this.length)
  }

  var val = this[offset + --byteLength]
  var mul = 1
  while (byteLength > 0 && (mul *= 0x100)) {
    val += this[offset + --byteLength] * mul
  }

  return val
}

Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  return this[offset]
}

Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return this[offset] | (this[offset + 1] << 8)
}

Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  return (this[offset] << 8) | this[offset + 1]
}

Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return ((this[offset]) |
      (this[offset + 1] << 8) |
      (this[offset + 2] << 16)) +
      (this[offset + 3] * 0x1000000)
}

Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] * 0x1000000) +
    ((this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    this[offset + 3])
}

Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var val = this[offset]
  var mul = 1
  var i = 0
  while (++i < byteLength && (mul *= 0x100)) {
    val += this[offset + i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) checkOffset(offset, byteLength, this.length)

  var i = byteLength
  var mul = 1
  var val = this[offset + --i]
  while (i > 0 && (mul *= 0x100)) {
    val += this[offset + --i] * mul
  }
  mul *= 0x80

  if (val >= mul) val -= Math.pow(2, 8 * byteLength)

  return val
}

Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 1, this.length)
  if (!(this[offset] & 0x80)) return (this[offset])
  return ((0xff - this[offset] + 1) * -1)
}

Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset] | (this[offset + 1] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 2, this.length)
  var val = this[offset + 1] | (this[offset] << 8)
  return (val & 0x8000) ? val | 0xFFFF0000 : val
}

Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset]) |
    (this[offset + 1] << 8) |
    (this[offset + 2] << 16) |
    (this[offset + 3] << 24)
}

Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)

  return (this[offset] << 24) |
    (this[offset + 1] << 16) |
    (this[offset + 2] << 8) |
    (this[offset + 3])
}

Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, true, 23, 4)
}

Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 4, this.length)
  return ieee754.read(this, offset, false, 23, 4)
}

Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, true, 52, 8)
}

Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
  offset = offset >>> 0
  if (!noAssert) checkOffset(offset, 8, this.length)
  return ieee754.read(this, offset, false, 52, 8)
}

function checkInt (buf, value, offset, ext, max, min) {
  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
}

Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var mul = 1
  var i = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  byteLength = byteLength >>> 0
  if (!noAssert) {
    var maxBytes = Math.pow(2, 8 * byteLength) - 1
    checkInt(this, value, offset, byteLength, maxBytes, 0)
  }

  var i = byteLength - 1
  var mul = 1
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    this[offset + i] = (value / mul) & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset + 3] = (value >>> 24)
  this[offset + 2] = (value >>> 16)
  this[offset + 1] = (value >>> 8)
  this[offset] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = 0
  var mul = 1
  var sub = 0
  this[offset] = value & 0xFF
  while (++i < byteLength && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    var limit = Math.pow(2, (8 * byteLength) - 1)

    checkInt(this, value, offset, byteLength, limit - 1, -limit)
  }

  var i = byteLength - 1
  var mul = 1
  var sub = 0
  this[offset + i] = value & 0xFF
  while (--i >= 0 && (mul *= 0x100)) {
    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
      sub = 1
    }
    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
  }

  return offset + byteLength
}

Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
  if (value < 0) value = 0xff + value + 1
  this[offset] = (value & 0xff)
  return offset + 1
}

Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  return offset + 2
}

Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
  this[offset] = (value >>> 8)
  this[offset + 1] = (value & 0xff)
  return offset + 2
}

Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  this[offset] = (value & 0xff)
  this[offset + 1] = (value >>> 8)
  this[offset + 2] = (value >>> 16)
  this[offset + 3] = (value >>> 24)
  return offset + 4
}

Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
  if (value < 0) value = 0xffffffff + value + 1
  this[offset] = (value >>> 24)
  this[offset + 1] = (value >>> 16)
  this[offset + 2] = (value >>> 8)
  this[offset + 3] = (value & 0xff)
  return offset + 4
}

function checkIEEE754 (buf, value, offset, ext, max, min) {
  if (offset + ext > buf.length) throw new RangeError('Index out of range')
  if (offset < 0) throw new RangeError('Index out of range')
}

function writeFloat (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
  }
  ieee754.write(buf, value, offset, littleEndian, 23, 4)
  return offset + 4
}

Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
  return writeFloat(this, value, offset, true, noAssert)
}

Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
  return writeFloat(this, value, offset, false, noAssert)
}

function writeDouble (buf, value, offset, littleEndian, noAssert) {
  value = +value
  offset = offset >>> 0
  if (!noAssert) {
    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
  }
  ieee754.write(buf, value, offset, littleEndian, 52, 8)
  return offset + 8
}

Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
  return writeDouble(this, value, offset, true, noAssert)
}

Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
  return writeDouble(this, value, offset, false, noAssert)
}

// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
Buffer.prototype.copy = function copy (target, targetStart, start, end) {
  if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
  if (!start) start = 0
  if (!end && end !== 0) end = this.length
  if (targetStart >= target.length) targetStart = target.length
  if (!targetStart) targetStart = 0
  if (end > 0 && end < start) end = start

  // Copy 0 bytes; we're done
  if (end === start) return 0
  if (target.length === 0 || this.length === 0) return 0

  // Fatal error conditions
  if (targetStart < 0) {
    throw new RangeError('targetStart out of bounds')
  }
  if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
  if (end < 0) throw new RangeError('sourceEnd out of bounds')

  // Are we oob?
  if (end > this.length) end = this.length
  if (target.length - targetStart < end - start) {
    end = target.length - targetStart + start
  }

  var len = end - start

  if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
    // Use built-in when available, missing from IE11
    this.copyWithin(targetStart, start, end)
  } else if (this === target && start < targetStart && targetStart < end) {
    // descending copy from end
    for (var i = len - 1; i >= 0; --i) {
      target[i + targetStart] = this[i + start]
    }
  } else {
    Uint8Array.prototype.set.call(
      target,
      this.subarray(start, end),
      targetStart
    )
  }

  return len
}

// Usage:
//    buffer.fill(number[, offset[, end]])
//    buffer.fill(buffer[, offset[, end]])
//    buffer.fill(string[, offset[, end]][, encoding])
Buffer.prototype.fill = function fill (val, start, end, encoding) {
  // Handle string cases:
  if (typeof val === 'string') {
    if (typeof start === 'string') {
      encoding = start
      start = 0
      end = this.length
    } else if (typeof end === 'string') {
      encoding = end
      end = this.length
    }
    if (encoding !== undefined && typeof encoding !== 'string') {
      throw new TypeError('encoding must be a string')
    }
    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
      throw new TypeError('Unknown encoding: ' + encoding)
    }
    if (val.length === 1) {
      var code = val.charCodeAt(0)
      if ((encoding === 'utf8' && code < 128) ||
          encoding === 'latin1') {
        // Fast path: If `val` fits into a single byte, use that numeric value.
        val = code
      }
    }
  } else if (typeof val === 'number') {
    val = val & 255
  }

  // Invalid ranges are not set to a default, so can range check early.
  if (start < 0 || this.length < start || this.length < end) {
    throw new RangeError('Out of range index')
  }

  if (end <= start) {
    return this
  }

  start = start >>> 0
  end = end === undefined ? this.length : end >>> 0

  if (!val) val = 0

  var i
  if (typeof val === 'number') {
    for (i = start; i < end; ++i) {
      this[i] = val
    }
  } else {
    var bytes = Buffer.isBuffer(val)
      ? val
      : Buffer.from(val, encoding)
    var len = bytes.length
    if (len === 0) {
      throw new TypeError('The value "' + val +
        '" is invalid for argument "value"')
    }
    for (i = 0; i < end - start; ++i) {
      this[i + start] = bytes[i % len]
    }
  }

  return this
}

// HELPER FUNCTIONS
// ================

var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g

function base64clean (str) {
  // Node takes equal signs as end of the Base64 encoding
  str = str.split('=')[0]
  // Node strips out invalid characters like \n and \t from the string, base64-js does not
  str = str.trim().replace(INVALID_BASE64_RE, '')
  // Node converts strings with length < 2 to ''
  if (str.length < 2) return ''
  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
  while (str.length % 4 !== 0) {
    str = str + '='
  }
  return str
}

function toHex (n) {
  if (n < 16) return '0' + n.toString(16)
  return n.toString(16)
}

function utf8ToBytes (string, units) {
  units = units || Infinity
  var codePoint
  var length = string.length
  var leadSurrogate = null
  var bytes = []

  for (var i = 0; i < length; ++i) {
    codePoint = string.charCodeAt(i)

    // is surrogate component
    if (codePoint > 0xD7FF && codePoint < 0xE000) {
      // last char was a lead
      if (!leadSurrogate) {
        // no lead yet
        if (codePoint > 0xDBFF) {
          // unexpected trail
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        } else if (i + 1 === length) {
          // unpaired lead
          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
          continue
        }

        // valid lead
        leadSurrogate = codePoint

        continue
      }

      // 2 leads in a row
      if (codePoint < 0xDC00) {
        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
        leadSurrogate = codePoint
        continue
      }

      // valid surrogate pair
      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
    } else if (leadSurrogate) {
      // valid bmp char, but last char was a lead
      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
    }

    leadSurrogate = null

    // encode utf8
    if (codePoint < 0x80) {
      if ((units -= 1) < 0) break
      bytes.push(codePoint)
    } else if (codePoint < 0x800) {
      if ((units -= 2) < 0) break
      bytes.push(
        codePoint >> 0x6 | 0xC0,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x10000) {
      if ((units -= 3) < 0) break
      bytes.push(
        codePoint >> 0xC | 0xE0,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else if (codePoint < 0x110000) {
      if ((units -= 4) < 0) break
      bytes.push(
        codePoint >> 0x12 | 0xF0,
        codePoint >> 0xC & 0x3F | 0x80,
        codePoint >> 0x6 & 0x3F | 0x80,
        codePoint & 0x3F | 0x80
      )
    } else {
      throw new Error('Invalid code point')
    }
  }

  return bytes
}

function asciiToBytes (str) {
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    // Node's code seems to be doing this and not & 0x7F..
    byteArray.push(str.charCodeAt(i) & 0xFF)
  }
  return byteArray
}

function utf16leToBytes (str, units) {
  var c, hi, lo
  var byteArray = []
  for (var i = 0; i < str.length; ++i) {
    if ((units -= 2) < 0) break

    c = str.charCodeAt(i)
    hi = c >> 8
    lo = c % 256
    byteArray.push(lo)
    byteArray.push(hi)
  }

  return byteArray
}

function base64ToBytes (str) {
  return base64.toByteArray(base64clean(str))
}

function blitBuffer (src, dst, offset, length) {
  for (var i = 0; i < length; ++i) {
    if ((i + offset >= dst.length) || (i >= src.length)) break
    dst[i + offset] = src[i]
  }
  return i
}

// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
// the `instanceof` check but they should be treated as of that type.
// See: https://github.com/feross/buffer/issues/166
function isInstance (obj, type) {
  return obj instanceof type ||
    (obj != null && obj.constructor != null && obj.constructor.name != null &&
      obj.constructor.name === type.name)
}
function numberIsNaN (obj) {
  // For IE11 support
  return obj !== obj // eslint-disable-line no-self-compare
}

}).call(this)}).call(this,require("buffer").Buffer)
},{"base64-js":5,"buffer":6,"ieee754":18}],7:[function(require,module,exports){
'use strict';

var GetIntrinsic = require('get-intrinsic');

var callBind = require('./');

var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));

module.exports = function callBoundIntrinsic(name, allowMissing) {
	var intrinsic = GetIntrinsic(name, !!allowMissing);
	if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {
		return callBind(intrinsic);
	}
	return intrinsic;
};

},{"./":8,"get-intrinsic":14}],8:[function(require,module,exports){
'use strict';

var bind = require('function-bind');
var GetIntrinsic = require('get-intrinsic');

var $apply = GetIntrinsic('%Function.prototype.apply%');
var $call = GetIntrinsic('%Function.prototype.call%');
var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);

var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true);
var $max = GetIntrinsic('%Math.max%');

if ($defineProperty) {
	try {
		$defineProperty({}, 'a', { value: 1 });
	} catch (e) {
		// IE 8 has a broken defineProperty
		$defineProperty = null;
	}
}

module.exports = function callBind(originalFunction) {
	var func = $reflectApply(bind, $call, arguments);
	if ($gOPD && $defineProperty) {
		var desc = $gOPD(func, 'length');
		if (desc.configurable) {
			// original length, plus the receiver, minus any additional arguments (after the receiver)
			$defineProperty(
				func,
				'length',
				{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) }
			);
		}
	}
	return func;
};

var applyBind = function applyBind() {
	return $reflectApply(bind, $apply, arguments);
};

if ($defineProperty) {
	$defineProperty(module.exports, 'apply', { value: applyBind });
} else {
	module.exports.apply = applyBind;
}

},{"function-bind":13,"get-intrinsic":14}],9:[function(require,module,exports){
'use strict';

var GetIntrinsic = require('get-intrinsic');

var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%');
if ($gOPD) {
	try {
		$gOPD([], 'length');
	} catch (e) {
		// IE 8 has a broken gOPD
		$gOPD = null;
	}
}

module.exports = $gOPD;

},{"get-intrinsic":14}],10:[function(require,module,exports){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

'use strict';

var R = typeof Reflect === 'object' ? Reflect : null
var ReflectApply = R && typeof R.apply === 'function'
  ? R.apply
  : function ReflectApply(target, receiver, args) {
    return Function.prototype.apply.call(target, receiver, args);
  }

var ReflectOwnKeys
if (R && typeof R.ownKeys === 'function') {
  ReflectOwnKeys = R.ownKeys
} else if (Object.getOwnPropertySymbols) {
  ReflectOwnKeys = function ReflectOwnKeys(target) {
    return Object.getOwnPropertyNames(target)
      .concat(Object.getOwnPropertySymbols(target));
  };
} else {
  ReflectOwnKeys = function ReflectOwnKeys(target) {
    return Object.getOwnPropertyNames(target);
  };
}

function ProcessEmitWarning(warning) {
  if (console && console.warn) console.warn(warning);
}

var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
  return value !== value;
}

function EventEmitter() {
  EventEmitter.init.call(this);
}
module.exports = EventEmitter;
module.exports.once = once;

// Backwards-compat with node 0.10.x
EventEmitter.EventEmitter = EventEmitter;

EventEmitter.prototype._events = undefined;
EventEmitter.prototype._eventsCount = 0;
EventEmitter.prototype._maxListeners = undefined;

// By default EventEmitters will print a warning if more than 10 listeners are
// added to it. This is a useful default which helps finding memory leaks.
var defaultMaxListeners = 10;

function checkListener(listener) {
  if (typeof listener !== 'function') {
    throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
  }
}

Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
  enumerable: true,
  get: function() {
    return defaultMaxListeners;
  },
  set: function(arg) {
    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
      throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
    }
    defaultMaxListeners = arg;
  }
});

EventEmitter.init = function() {

  if (this._events === undefined ||
      this._events === Object.getPrototypeOf(this)._events) {
    this._events = Object.create(null);
    this._eventsCount = 0;
  }

  this._maxListeners = this._maxListeners || undefined;
};

// Obviously not all Emitters should be limited to 10. This function allows
// that to be increased. Set to zero for unlimited.
EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
    throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
  }
  this._maxListeners = n;
  return this;
};

function _getMaxListeners(that) {
  if (that._maxListeners === undefined)
    return EventEmitter.defaultMaxListeners;
  return that._maxListeners;
}

EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
  return _getMaxListeners(this);
};

EventEmitter.prototype.emit = function emit(type) {
  var args = [];
  for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
  var doError = (type === 'error');

  var events = this._events;
  if (events !== undefined)
    doError = (doError && events.error === undefined);
  else if (!doError)
    return false;

  // If there is no 'error' event listener then throw.
  if (doError) {
    var er;
    if (args.length > 0)
      er = args[0];
    if (er instanceof Error) {
      // Note: The comments on the `throw` lines are intentional, they show
      // up in Node's output if this results in an unhandled exception.
      throw er; // Unhandled 'error' event
    }
    // At least give some kind of context to the user
    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
    err.context = er;
    throw err; // Unhandled 'error' event
  }

  var handler = events[type];

  if (handler === undefined)
    return false;

  if (typeof handler === 'function') {
    ReflectApply(handler, this, args);
  } else {
    var len = handler.length;
    var listeners = arrayClone(handler, len);
    for (var i = 0; i < len; ++i)
      ReflectApply(listeners[i], this, args);
  }

  return true;
};

function _addListener(target, type, listener, prepend) {
  var m;
  var events;
  var existing;

  checkListener(listener);

  events = target._events;
  if (events === undefined) {
    events = target._events = Object.create(null);
    target._eventsCount = 0;
  } else {
    // To avoid recursion in the case that type === "newListener"! Before
    // adding it to the listeners, first emit "newListener".
    if (events.newListener !== undefined) {
      target.emit('newListener', type,
                  listener.listener ? listener.listener : listener);

      // Re-assign `events` because a newListener handler could have caused the
      // this._events to be assigned to a new object
      events = target._events;
    }
    existing = events[type];
  }

  if (existing === undefined) {
    // Optimize the case of one listener. Don't need the extra array object.
    existing = events[type] = listener;
    ++target._eventsCount;
  } else {
    if (typeof existing === 'function') {
      // Adding the second element, need to change to array.
      existing = events[type] =
        prepend ? [listener, existing] : [existing, listener];
      // If we've already got an array, just append.
    } else if (prepend) {
      existing.unshift(listener);
    } else {
      existing.push(listener);
    }

    // Check for listener leak
    m = _getMaxListeners(target);
    if (m > 0 && existing.length > m && !existing.warned) {
      existing.warned = true;
      // No error code for this since it is a Warning
      // eslint-disable-next-line no-restricted-syntax
      var w = new Error('Possible EventEmitter memory leak detected. ' +
                          existing.length + ' ' + String(type) + ' listeners ' +
                          'added. Use emitter.setMaxListeners() to ' +
                          'increase limit');
      w.name = 'MaxListenersExceededWarning';
      w.emitter = target;
      w.type = type;
      w.count = existing.length;
      ProcessEmitWarning(w);
    }
  }

  return target;
}

EventEmitter.prototype.addListener = function addListener(type, listener) {
  return _addListener(this, type, listener, false);
};

EventEmitter.prototype.on = EventEmitter.prototype.addListener;

EventEmitter.prototype.prependListener =
    function prependListener(type, listener) {
      return _addListener(this, type, listener, true);
    };

function onceWrapper() {
  if (!this.fired) {
    this.target.removeListener(this.type, this.wrapFn);
    this.fired = true;
    if (arguments.length === 0)
      return this.listener.call(this.target);
    return this.listener.apply(this.target, arguments);
  }
}

function _onceWrap(target, type, listener) {
  var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
  var wrapped = onceWrapper.bind(state);
  wrapped.listener = listener;
  state.wrapFn = wrapped;
  return wrapped;
}

EventEmitter.prototype.once = function once(type, listener) {
  checkListener(listener);
  this.on(type, _onceWrap(this, type, listener));
  return this;
};

EventEmitter.prototype.prependOnceListener =
    function prependOnceListener(type, listener) {
      checkListener(listener);
      this.prependListener(type, _onceWrap(this, type, listener));
      return this;
    };

// Emits a 'removeListener' event if and only if the listener was removed.
EventEmitter.prototype.removeListener =
    function removeListener(type, listener) {
      var list, events, position, i, originalListener;

      checkListener(listener);

      events = this._events;
      if (events === undefined)
        return this;

      list = events[type];
      if (list === undefined)
        return this;

      if (list === listener || list.listener === listener) {
        if (--this._eventsCount === 0)
          this._events = Object.create(null);
        else {
          delete events[type];
          if (events.removeListener)
            this.emit('removeListener', type, list.listener || listener);
        }
      } else if (typeof list !== 'function') {
        position = -1;

        for (i = list.length - 1; i >= 0; i--) {
          if (list[i] === listener || list[i].listener === listener) {
            originalListener = list[i].listener;
            position = i;
            break;
          }
        }

        if (position < 0)
          return this;

        if (position === 0)
          list.shift();
        else {
          spliceOne(list, position);
        }

        if (list.length === 1)
          events[type] = list[0];

        if (events.removeListener !== undefined)
          this.emit('removeListener', type, originalListener || listener);
      }

      return this;
    };

EventEmitter.prototype.off = EventEmitter.prototype.removeListener;

EventEmitter.prototype.removeAllListeners =
    function removeAllListeners(type) {
      var listeners, events, i;

      events = this._events;
      if (events === undefined)
        return this;

      // not listening for removeListener, no need to emit
      if (events.removeListener === undefined) {
        if (arguments.length === 0) {
          this._events = Object.create(null);
          this._eventsCount = 0;
        } else if (events[type] !== undefined) {
          if (--this._eventsCount === 0)
            this._events = Object.create(null);
          else
            delete events[type];
        }
        return this;
      }

      // emit removeListener for all listeners on all events
      if (arguments.length === 0) {
        var keys = Object.keys(events);
        var key;
        for (i = 0; i < keys.length; ++i) {
          key = keys[i];
          if (key === 'removeListener') continue;
          this.removeAllListeners(key);
        }
        this.removeAllListeners('removeListener');
        this._events = Object.create(null);
        this._eventsCount = 0;
        return this;
      }

      listeners = events[type];

      if (typeof listeners === 'function') {
        this.removeListener(type, listeners);
      } else if (listeners !== undefined) {
        // LIFO order
        for (i = listeners.length - 1; i >= 0; i--) {
          this.removeListener(type, listeners[i]);
        }
      }

      return this;
    };

function _listeners(target, type, unwrap) {
  var events = target._events;

  if (events === undefined)
    return [];

  var evlistener = events[type];
  if (evlistener === undefined)
    return [];

  if (typeof evlistener === 'function')
    return unwrap ? [evlistener.listener || evlistener] : [evlistener];

  return unwrap ?
    unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
}

EventEmitter.prototype.listeners = function listeners(type) {
  return _listeners(this, type, true);
};

EventEmitter.prototype.rawListeners = function rawListeners(type) {
  return _listeners(this, type, false);
};

EventEmitter.listenerCount = function(emitter, type) {
  if (typeof emitter.listenerCount === 'function') {
    return emitter.listenerCount(type);
  } else {
    return listenerCount.call(emitter, type);
  }
};

EventEmitter.prototype.listenerCount = listenerCount;
function listenerCount(type) {
  var events = this._events;

  if (events !== undefined) {
    var evlistener = events[type];

    if (typeof evlistener === 'function') {
      return 1;
    } else if (evlistener !== undefined) {
      return evlistener.length;
    }
  }

  return 0;
}

EventEmitter.prototype.eventNames = function eventNames() {
  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
};

function arrayClone(arr, n) {
  var copy = new Array(n);
  for (var i = 0; i < n; ++i)
    copy[i] = arr[i];
  return copy;
}

function spliceOne(list, index) {
  for (; index + 1 < list.length; index++)
    list[index] = list[index + 1];
  list.pop();
}

function unwrapListeners(arr) {
  var ret = new Array(arr.length);
  for (var i = 0; i < ret.length; ++i) {
    ret[i] = arr[i].listener || arr[i];
  }
  return ret;
}

function once(emitter, name) {
  return new Promise(function (resolve, reject) {
    function errorListener(err) {
      emitter.removeListener(name, resolver);
      reject(err);
    }

    function resolver() {
      if (typeof emitter.removeListener === 'function') {
        emitter.removeListener('error', errorListener);
      }
      resolve([].slice.call(arguments));
    };

    eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });
    if (name !== 'error') {
      addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });
    }
  });
}

function addErrorHandlerIfEventEmitter(emitter, handler, flags) {
  if (typeof emitter.on === 'function') {
    eventTargetAgnosticAddListener(emitter, 'error', handler, flags);
  }
}

function eventTargetAgnosticAddListener(emitter, name, listener, flags) {
  if (typeof emitter.on === 'function') {
    if (flags.once) {
      emitter.once(name, listener);
    } else {
      emitter.on(name, listener);
    }
  } else if (typeof emitter.addEventListener === 'function') {
    // EventTarget does not have `error` event semantics like Node
    // EventEmitters, we do not listen for `error` events here.
    emitter.addEventListener(name, function wrapListener(arg) {
      // IE does not have builtin `{ once: true }` support so we
      // have to do it manually.
      if (flags.once) {
        emitter.removeEventListener(name, wrapListener);
      }
      listener(arg);
    });
  } else {
    throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof emitter);
  }
}

},{}],11:[function(require,module,exports){

var hasOwn = Object.prototype.hasOwnProperty;
var toString = Object.prototype.toString;

module.exports = function forEach (obj, fn, ctx) {
    if (toString.call(fn) !== '[object Function]') {
        throw new TypeError('iterator must be a function');
    }
    var l = obj.length;
    if (l === +l) {
        for (var i = 0; i < l; i++) {
            fn.call(ctx, obj[i], i, obj);
        }
    } else {
        for (var k in obj) {
            if (hasOwn.call(obj, k)) {
                fn.call(ctx, obj[k], k, obj);
            }
        }
    }
};


},{}],12:[function(require,module,exports){
'use strict';

/* eslint no-invalid-this: 1 */

var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
var slice = Array.prototype.slice;
var toStr = Object.prototype.toString;
var funcType = '[object Function]';

module.exports = function bind(that) {
    var target = this;
    if (typeof target !== 'function' || toStr.call(target) !== funcType) {
        throw new TypeError(ERROR_MESSAGE + target);
    }
    var args = slice.call(arguments, 1);

    var bound;
    var binder = function () {
        if (this instanceof bound) {
            var result = target.apply(
                this,
                args.concat(slice.call(arguments))
            );
            if (Object(result) === result) {
                return result;
            }
            return this;
        } else {
            return target.apply(
                that,
                args.concat(slice.call(arguments))
            );
        }
    };

    var boundLength = Math.max(0, target.length - args.length);
    var boundArgs = [];
    for (var i = 0; i < boundLength; i++) {
        boundArgs.push('$' + i);
    }

    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);

    if (target.prototype) {
        var Empty = function Empty() {};
        Empty.prototype = target.prototype;
        bound.prototype = new Empty();
        Empty.prototype = null;
    }

    return bound;
};

},{}],13:[function(require,module,exports){
'use strict';

var implementation = require('./implementation');

module.exports = Function.prototype.bind || implementation;

},{"./implementation":12}],14:[function(require,module,exports){
'use strict';

var undefined;

var $SyntaxError = SyntaxError;
var $Function = Function;
var $TypeError = TypeError;

// eslint-disable-next-line consistent-return
var getEvalledConstructor = function (expressionSyntax) {
	try {
		return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')();
	} catch (e) {}
};

var $gOPD = Object.getOwnPropertyDescriptor;
if ($gOPD) {
	try {
		$gOPD({}, '');
	} catch (e) {
		$gOPD = null; // this is IE 8, which has a broken gOPD
	}
}

var throwTypeError = function () {
	throw new $TypeError();
};
var ThrowTypeError = $gOPD
	? (function () {
		try {
			// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
			arguments.callee; // IE 8 does not throw here
			return throwTypeError;
		} catch (calleeThrows) {
			try {
				// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
				return $gOPD(arguments, 'callee').get;
			} catch (gOPDthrows) {
				return throwTypeError;
			}
		}
	}())
	: throwTypeError;

var hasSymbols = require('has-symbols')();

var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto

var needsEval = {};

var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);

var INTRINSICS = {
	'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,
	'%Array%': Array,
	'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
	'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
	'%AsyncFromSyncIteratorPrototype%': undefined,
	'%AsyncFunction%': needsEval,
	'%AsyncGenerator%': needsEval,
	'%AsyncGeneratorFunction%': needsEval,
	'%AsyncIteratorPrototype%': needsEval,
	'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
	'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,
	'%Boolean%': Boolean,
	'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
	'%Date%': Date,
	'%decodeURI%': decodeURI,
	'%decodeURIComponent%': decodeURIComponent,
	'%encodeURI%': encodeURI,
	'%encodeURIComponent%': encodeURIComponent,
	'%Error%': Error,
	'%eval%': eval, // eslint-disable-line no-eval
	'%EvalError%': EvalError,
	'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
	'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
	'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,
	'%Function%': $Function,
	'%GeneratorFunction%': needsEval,
	'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
	'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
	'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
	'%isFinite%': isFinite,
	'%isNaN%': isNaN,
	'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
	'%JSON%': typeof JSON === 'object' ? JSON : undefined,
	'%Map%': typeof Map === 'undefined' ? undefined : Map,
	'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
	'%Math%': Math,
	'%Number%': Number,
	'%Object%': Object,
	'%parseFloat%': parseFloat,
	'%parseInt%': parseInt,
	'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
	'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
	'%RangeError%': RangeError,
	'%ReferenceError%': ReferenceError,
	'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
	'%RegExp%': RegExp,
	'%Set%': typeof Set === 'undefined' ? undefined : Set,
	'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
	'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
	'%String%': String,
	'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
	'%Symbol%': hasSymbols ? Symbol : undefined,
	'%SyntaxError%': $SyntaxError,
	'%ThrowTypeError%': ThrowTypeError,
	'%TypedArray%': TypedArray,
	'%TypeError%': $TypeError,
	'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
	'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
	'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
	'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
	'%URIError%': URIError,
	'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
	'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,
	'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet
};

var doEval = function doEval(name) {
	var value;
	if (name === '%AsyncFunction%') {
		value = getEvalledConstructor('async function () {}');
	} else if (name === '%GeneratorFunction%') {
		value = getEvalledConstructor('function* () {}');
	} else if (name === '%AsyncGeneratorFunction%') {
		value = getEvalledConstructor('async function* () {}');
	} else if (name === '%AsyncGenerator%') {
		var fn = doEval('%AsyncGeneratorFunction%');
		if (fn) {
			value = fn.prototype;
		}
	} else if (name === '%AsyncIteratorPrototype%') {
		var gen = doEval('%AsyncGenerator%');
		if (gen) {
			value = getProto(gen.prototype);
		}
	}

	INTRINSICS[name] = value;

	return value;
};

var LEGACY_ALIASES = {
	'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],
	'%ArrayPrototype%': ['Array', 'prototype'],
	'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],
	'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],
	'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],
	'%ArrayProto_values%': ['Array', 'prototype', 'values'],
	'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],
	'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],
	'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],
	'%BooleanPrototype%': ['Boolean', 'prototype'],
	'%DataViewPrototype%': ['DataView', 'prototype'],
	'%DatePrototype%': ['Date', 'prototype'],
	'%ErrorPrototype%': ['Error', 'prototype'],
	'%EvalErrorPrototype%': ['EvalError', 'prototype'],
	'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],
	'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],
	'%FunctionPrototype%': ['Function', 'prototype'],
	'%Generator%': ['GeneratorFunction', 'prototype'],
	'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],
	'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],
	'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],
	'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],
	'%JSONParse%': ['JSON', 'parse'],
	'%JSONStringify%': ['JSON', 'stringify'],
	'%MapPrototype%': ['Map', 'prototype'],
	'%NumberPrototype%': ['Number', 'prototype'],
	'%ObjectPrototype%': ['Object', 'prototype'],
	'%ObjProto_toString%': ['Object', 'prototype', 'toString'],
	'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],
	'%PromisePrototype%': ['Promise', 'prototype'],
	'%PromiseProto_then%': ['Promise', 'prototype', 'then'],
	'%Promise_all%': ['Promise', 'all'],
	'%Promise_reject%': ['Promise', 'reject'],
	'%Promise_resolve%': ['Promise', 'resolve'],
	'%RangeErrorPrototype%': ['RangeError', 'prototype'],
	'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],
	'%RegExpPrototype%': ['RegExp', 'prototype'],
	'%SetPrototype%': ['Set', 'prototype'],
	'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],
	'%StringPrototype%': ['String', 'prototype'],
	'%SymbolPrototype%': ['Symbol', 'prototype'],
	'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],
	'%TypedArrayPrototype%': ['TypedArray', 'prototype'],
	'%TypeErrorPrototype%': ['TypeError', 'prototype'],
	'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],
	'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],
	'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],
	'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],
	'%URIErrorPrototype%': ['URIError', 'prototype'],
	'%WeakMapPrototype%': ['WeakMap', 'prototype'],
	'%WeakSetPrototype%': ['WeakSet', 'prototype']
};

var bind = require('function-bind');
var hasOwn = require('has');
var $concat = bind.call(Function.call, Array.prototype.concat);
var $spliceApply = bind.call(Function.apply, Array.prototype.splice);
var $replace = bind.call(Function.call, String.prototype.replace);
var $strSlice = bind.call(Function.call, String.prototype.slice);

/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
var stringToPath = function stringToPath(string) {
	var first = $strSlice(string, 0, 1);
	var last = $strSlice(string, -1);
	if (first === '%' && last !== '%') {
		throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`');
	} else if (last === '%' && first !== '%') {
		throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`');
	}
	var result = [];
	$replace(string, rePropName, function (match, number, quote, subString) {
		result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;
	});
	return result;
};
/* end adaptation */

var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
	var intrinsicName = name;
	var alias;
	if (hasOwn(LEGACY_ALIASES, intrinsicName)) {
		alias = LEGACY_ALIASES[intrinsicName];
		intrinsicName = '%' + alias[0] + '%';
	}

	if (hasOwn(INTRINSICS, intrinsicName)) {
		var value = INTRINSICS[intrinsicName];
		if (value === needsEval) {
			value = doEval(intrinsicName);
		}
		if (typeof value === 'undefined' && !allowMissing) {
			throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
		}

		return {
			alias: alias,
			name: intrinsicName,
			value: value
		};
	}

	throw new $SyntaxError('intrinsic ' + name + ' does not exist!');
};

module.exports = function GetIntrinsic(name, allowMissing) {
	if (typeof name !== 'string' || name.length === 0) {
		throw new $TypeError('intrinsic name must be a non-empty string');
	}
	if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
		throw new $TypeError('"allowMissing" argument must be a boolean');
	}

	var parts = stringToPath(name);
	var intrinsicBaseName = parts.length > 0 ? parts[0] : '';

	var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);
	var intrinsicRealName = intrinsic.name;
	var value = intrinsic.value;
	var skipFurtherCaching = false;

	var alias = intrinsic.alias;
	if (alias) {
		intrinsicBaseName = alias[0];
		$spliceApply(parts, $concat([0, 1], alias));
	}

	for (var i = 1, isOwn = true; i < parts.length; i += 1) {
		var part = parts[i];
		var first = $strSlice(part, 0, 1);
		var last = $strSlice(part, -1);
		if (
			(
				(first === '"' || first === "'" || first === '`')
				|| (last === '"' || last === "'" || last === '`')
			)
			&& first !== last
		) {
			throw new $SyntaxError('property names with quotes must have matching quotes');
		}
		if (part === 'constructor' || !isOwn) {
			skipFurtherCaching = true;
		}

		intrinsicBaseName += '.' + part;
		intrinsicRealName = '%' + intrinsicBaseName + '%';

		if (hasOwn(INTRINSICS, intrinsicRealName)) {
			value = INTRINSICS[intrinsicRealName];
		} else if (value != null) {
			if (!(part in value)) {
				if (!allowMissing) {
					throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
				}
				return void undefined;
			}
			if ($gOPD && (i + 1) >= parts.length) {
				var desc = $gOPD(value, part);
				isOwn = !!desc;

				// By convention, when a data property is converted to an accessor
				// property to emulate a data property that does not suffer from
				// the override mistake, that accessor's getter is marked with
				// an `originalValue` property. Here, when we detect this, we
				// uphold the illusion by pretending to see that original data
				// property, i.e., returning the value rather than the getter
				// itself.
				if (isOwn && 'get' in desc && !('originalValue' in desc.get)) {
					value = desc.get;
				} else {
					value = value[part];
				}
			} else {
				isOwn = hasOwn(value, part);
				value = value[part];
			}

			if (isOwn && !skipFurtherCaching) {
				INTRINSICS[intrinsicRealName] = value;
			}
		}
	}
	return value;
};

},{"function-bind":13,"has":17,"has-symbols":15}],15:[function(require,module,exports){
'use strict';

var origSymbol = typeof Symbol !== 'undefined' && Symbol;
var hasSymbolSham = require('./shams');

module.exports = function hasNativeSymbols() {
	if (typeof origSymbol !== 'function') { return false; }
	if (typeof Symbol !== 'function') { return false; }
	if (typeof origSymbol('foo') !== 'symbol') { return false; }
	if (typeof Symbol('bar') !== 'symbol') { return false; }

	return hasSymbolSham();
};

},{"./shams":16}],16:[function(require,module,exports){
'use strict';

/* eslint complexity: [2, 18], max-statements: [2, 33] */
module.exports = function hasSymbols() {
	if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }
	if (typeof Symbol.iterator === 'symbol') { return true; }

	var obj = {};
	var sym = Symbol('test');
	var symObj = Object(sym);
	if (typeof sym === 'string') { return false; }

	if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }
	if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }

	// temp disabled per https://github.com/ljharb/object.assign/issues/17
	// if (sym instanceof Symbol) { return false; }
	// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
	// if (!(symObj instanceof Symbol)) { return false; }

	// if (typeof Symbol.prototype.toString !== 'function') { return false; }
	// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }

	var symVal = 42;
	obj[sym] = symVal;
	for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop
	if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }

	if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }

	var syms = Object.getOwnPropertySymbols(obj);
	if (syms.length !== 1 || syms[0] !== sym) { return false; }

	if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }

	if (typeof Object.getOwnPropertyDescriptor === 'function') {
		var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
		if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }
	}

	return true;
};

},{}],17:[function(require,module,exports){
'use strict';

var bind = require('function-bind');

module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty);

},{"function-bind":13}],18:[function(require,module,exports){
/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
exports.read = function (buffer, offset, isLE, mLen, nBytes) {
  var e, m
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var nBits = -7
  var i = isLE ? (nBytes - 1) : 0
  var d = isLE ? -1 : 1
  var s = buffer[offset + i]

  i += d

  e = s & ((1 << (-nBits)) - 1)
  s >>= (-nBits)
  nBits += eLen
  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  m = e & ((1 << (-nBits)) - 1)
  e >>= (-nBits)
  nBits += mLen
  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}

  if (e === 0) {
    e = 1 - eBias
  } else if (e === eMax) {
    return m ? NaN : ((s ? -1 : 1) * Infinity)
  } else {
    m = m + Math.pow(2, mLen)
    e = e - eBias
  }
  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
}

exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
  var e, m, c
  var eLen = (nBytes * 8) - mLen - 1
  var eMax = (1 << eLen) - 1
  var eBias = eMax >> 1
  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
  var i = isLE ? 0 : (nBytes - 1)
  var d = isLE ? 1 : -1
  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0

  value = Math.abs(value)

  if (isNaN(value) || value === Infinity) {
    m = isNaN(value) ? 1 : 0
    e = eMax
  } else {
    e = Math.floor(Math.log(value) / Math.LN2)
    if (value * (c = Math.pow(2, -e)) < 1) {
      e--
      c *= 2
    }
    if (e + eBias >= 1) {
      value += rt / c
    } else {
      value += rt * Math.pow(2, 1 - eBias)
    }
    if (value * c >= 2) {
      e++
      c /= 2
    }

    if (e + eBias >= eMax) {
      m = 0
      e = eMax
    } else if (e + eBias >= 1) {
      m = ((value * c) - 1) * Math.pow(2, mLen)
      e = e + eBias
    } else {
      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
      e = 0
    }
  }

  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}

  e = (e << mLen) | m
  eLen += mLen
  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}

  buffer[offset + i - d] |= s * 128
}

},{}],19:[function(require,module,exports){
if (typeof Object.create === 'function') {
  // implementation from standard node.js 'util' module
  module.exports = function inherits(ctor, superCtor) {
    if (superCtor) {
      ctor.super_ = superCtor
      ctor.prototype = Object.create(superCtor.prototype, {
        constructor: {
          value: ctor,
          enumerable: false,
          writable: true,
          configurable: true
        }
      })
    }
  };
} else {
  // old school shim for old browsers
  module.exports = function inherits(ctor, superCtor) {
    if (superCtor) {
      ctor.super_ = superCtor
      var TempCtor = function () {}
      TempCtor.prototype = superCtor.prototype
      ctor.prototype = new TempCtor()
      ctor.prototype.constructor = ctor
    }
  }
}

},{}],20:[function(require,module,exports){
'use strict';

var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
var callBound = require('call-bind/callBound');

var $toString = callBound('Object.prototype.toString');

var isStandardArguments = function isArguments(value) {
	if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
		return false;
	}
	return $toString(value) === '[object Arguments]';
};

var isLegacyArguments = function isArguments(value) {
	if (isStandardArguments(value)) {
		return true;
	}
	return value !== null &&
		typeof value === 'object' &&
		typeof value.length === 'number' &&
		value.length >= 0 &&
		$toString(value) !== '[object Array]' &&
		$toString(value.callee) === '[object Function]';
};

var supportsStandardArguments = (function () {
	return isStandardArguments(arguments);
}());

isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests

module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;

},{"call-bind/callBound":7}],21:[function(require,module,exports){
'use strict';

var toStr = Object.prototype.toString;
var fnToStr = Function.prototype.toString;
var isFnRegex = /^\s*(?:function)?\*/;
var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
var getProto = Object.getPrototypeOf;
var getGeneratorFunc = function () { // eslint-disable-line consistent-return
	if (!hasToStringTag) {
		return false;
	}
	try {
		return Function('return function*() {}')();
	} catch (e) {
	}
};
var GeneratorFunction;

module.exports = function isGeneratorFunction(fn) {
	if (typeof fn !== 'function') {
		return false;
	}
	if (isFnRegex.test(fnToStr.call(fn))) {
		return true;
	}
	if (!hasToStringTag) {
		var str = toStr.call(fn);
		return str === '[object GeneratorFunction]';
	}
	if (!getProto) {
		return false;
	}
	if (typeof GeneratorFunction === 'undefined') {
		var generatorFunc = getGeneratorFunc();
		GeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;
	}
	return getProto(fn) === GeneratorFunction;
};

},{}],22:[function(require,module,exports){
(function (global){(function (){
'use strict';

var forEach = require('foreach');
var availableTypedArrays = require('available-typed-arrays');
var callBound = require('call-bind/callBound');

var $toString = callBound('Object.prototype.toString');
var hasSymbols = require('has-symbols')();
var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';

var typedArrays = availableTypedArrays();

var $indexOf = callBound('Array.prototype.indexOf', true) || function indexOf(array, value) {
	for (var i = 0; i < array.length; i += 1) {
		if (array[i] === value) {
			return i;
		}
	}
	return -1;
};
var $slice = callBound('String.prototype.slice');
var toStrTags = {};
var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');
var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
if (hasToStringTag && gOPD && getPrototypeOf) {
	forEach(typedArrays, function (typedArray) {
		var arr = new global[typedArray]();
		if (!(Symbol.toStringTag in arr)) {
			throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');
		}
		var proto = getPrototypeOf(arr);
		var descriptor = gOPD(proto, Symbol.toStringTag);
		if (!descriptor) {
			var superProto = getPrototypeOf(proto);
			descriptor = gOPD(superProto, Symbol.toStringTag);
		}
		toStrTags[typedArray] = descriptor.get;
	});
}

var tryTypedArrays = function tryAllTypedArrays(value) {
	var anyTrue = false;
	forEach(toStrTags, function (getter, typedArray) {
		if (!anyTrue) {
			try {
				anyTrue = getter.call(value) === typedArray;
			} catch (e) { /**/ }
		}
	});
	return anyTrue;
};

module.exports = function isTypedArray(value) {
	if (!value || typeof value !== 'object') { return false; }
	if (!hasToStringTag) {
		var tag = $slice($toString(value), 8, -1);
		return $indexOf(typedArrays, tag) > -1;
	}
	if (!gOPD) { return false; }
	return tryTypedArrays(value);
};

}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"available-typed-arrays":4,"call-bind/callBound":7,"es-abstract/helpers/getOwnPropertyDescriptor":9,"foreach":11,"has-symbols":15}],23:[function(require,module,exports){
// shim for using process in browser
var process = module.exports = {};

// cached from whatever global is present so that test runners that stub it
// don't break things.  But we need to wrap it in a try catch in case it is
// wrapped in strict mode code which doesn't define any globals.  It's inside a
// function because try/catches deoptimize in certain engines.

var cachedSetTimeout;
var cachedClearTimeout;

function defaultSetTimout() {
    throw new Error('setTimeout has not been defined');
}
function defaultClearTimeout () {
    throw new Error('clearTimeout has not been defined');
}
(function () {
    try {
        if (typeof setTimeout === 'function') {
            cachedSetTimeout = setTimeout;
        } else {
            cachedSetTimeout = defaultSetTimout;
        }
    } catch (e) {
        cachedSetTimeout = defaultSetTimout;
    }
    try {
        if (typeof clearTimeout === 'function') {
            cachedClearTimeout = clearTimeout;
        } else {
            cachedClearTimeout = defaultClearTimeout;
        }
    } catch (e) {
        cachedClearTimeout = defaultClearTimeout;
    }
} ())
function runTimeout(fun) {
    if (cachedSetTimeout === setTimeout) {
        //normal enviroments in sane situations
        return setTimeout(fun, 0);
    }
    // if setTimeout wasn't available but was latter defined
    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
        cachedSetTimeout = setTimeout;
        return setTimeout(fun, 0);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedSetTimeout(fun, 0);
    } catch(e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
            return cachedSetTimeout.call(null, fun, 0);
        } catch(e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
            return cachedSetTimeout.call(this, fun, 0);
        }
    }


}
function runClearTimeout(marker) {
    if (cachedClearTimeout === clearTimeout) {
        //normal enviroments in sane situations
        return clearTimeout(marker);
    }
    // if clearTimeout wasn't available but was latter defined
    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
        cachedClearTimeout = clearTimeout;
        return clearTimeout(marker);
    }
    try {
        // when when somebody has screwed with setTimeout but no I.E. maddness
        return cachedClearTimeout(marker);
    } catch (e){
        try {
            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
            return cachedClearTimeout.call(null, marker);
        } catch (e){
            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
            return cachedClearTimeout.call(this, marker);
        }
    }



}
var queue = [];
var draining = false;
var currentQueue;
var queueIndex = -1;

function cleanUpNextTick() {
    if (!draining || !currentQueue) {
        return;
    }
    draining = false;
    if (currentQueue.length) {
        queue = currentQueue.concat(queue);
    } else {
        queueIndex = -1;
    }
    if (queue.length) {
        drainQueue();
    }
}

function drainQueue() {
    if (draining) {
        return;
    }
    var timeout = runTimeout(cleanUpNextTick);
    draining = true;

    var len = queue.length;
    while(len) {
        currentQueue = queue;
        queue = [];
        while (++queueIndex < len) {
            if (currentQueue) {
                currentQueue[queueIndex].run();
            }
        }
        queueIndex = -1;
        len = queue.length;
    }
    currentQueue = null;
    draining = false;
    runClearTimeout(timeout);
}

process.nextTick = function (fun) {
    var args = new Array(arguments.length - 1);
    if (arguments.length > 1) {
        for (var i = 1; i < arguments.length; i++) {
            args[i - 1] = arguments[i];
        }
    }
    queue.push(new Item(fun, args));
    if (queue.length === 1 && !draining) {
        runTimeout(drainQueue);
    }
};

// v8 likes predictible objects
function Item(fun, array) {
    this.fun = fun;
    this.array = array;
}
Item.prototype.run = function () {
    this.fun.apply(null, this.array);
};
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
process.version = ''; // empty string to avoid regexp issues
process.versions = {};

function noop() {}

process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.prependListener = noop;
process.prependOnceListener = noop;

process.listeners = function (name) { return [] }

process.binding = function (name) {
    throw new Error('process.binding is not supported');
};

process.cwd = function () { return '/' };
process.chdir = function (dir) {
    throw new Error('process.chdir is not supported');
};
process.umask = function() { return 0; };

},{}],24:[function(require,module,exports){
module.exports = function isBuffer(arg) {
  return arg && typeof arg === 'object'
    && typeof arg.copy === 'function'
    && typeof arg.fill === 'function'
    && typeof arg.readUInt8 === 'function';
}
},{}],25:[function(require,module,exports){
// Currently in sync with Node.js lib/internal/util/types.js
// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9

'use strict';

var isArgumentsObject = require('is-arguments');
var isGeneratorFunction = require('is-generator-function');
var whichTypedArray = require('which-typed-array');
var isTypedArray = require('is-typed-array');

function uncurryThis(f) {
  return f.call.bind(f);
}

var BigIntSupported = typeof BigInt !== 'undefined';
var SymbolSupported = typeof Symbol !== 'undefined';

var ObjectToString = uncurryThis(Object.prototype.toString);

var numberValue = uncurryThis(Number.prototype.valueOf);
var stringValue = uncurryThis(String.prototype.valueOf);
var booleanValue = uncurryThis(Boolean.prototype.valueOf);

if (BigIntSupported) {
  var bigIntValue = uncurryThis(BigInt.prototype.valueOf);
}

if (SymbolSupported) {
  var symbolValue = uncurryThis(Symbol.prototype.valueOf);
}

function checkBoxedPrimitive(value, prototypeValueOf) {
  if (typeof value !== 'object') {
    return false;
  }
  try {
    prototypeValueOf(value);
    return true;
  } catch(e) {
    return false;
  }
}

exports.isArgumentsObject = isArgumentsObject;
exports.isGeneratorFunction = isGeneratorFunction;
exports.isTypedArray = isTypedArray;

// Taken from here and modified for better browser support
// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js
function isPromise(input) {
	return (
		(
			typeof Promise !== 'undefined' &&
			input instanceof Promise
		) ||
		(
			input !== null &&
			typeof input === 'object' &&
			typeof input.then === 'function' &&
			typeof input.catch === 'function'
		)
	);
}
exports.isPromise = isPromise;

function isArrayBufferView(value) {
  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {
    return ArrayBuffer.isView(value);
  }

  return (
    isTypedArray(value) ||
    isDataView(value)
  );
}
exports.isArrayBufferView = isArrayBufferView;


function isUint8Array(value) {
  return whichTypedArray(value) === 'Uint8Array';
}
exports.isUint8Array = isUint8Array;

function isUint8ClampedArray(value) {
  return whichTypedArray(value) === 'Uint8ClampedArray';
}
exports.isUint8ClampedArray = isUint8ClampedArray;

function isUint16Array(value) {
  return whichTypedArray(value) === 'Uint16Array';
}
exports.isUint16Array = isUint16Array;

function isUint32Array(value) {
  return whichTypedArray(value) === 'Uint32Array';
}
exports.isUint32Array = isUint32Array;

function isInt8Array(value) {
  return whichTypedArray(value) === 'Int8Array';
}
exports.isInt8Array = isInt8Array;

function isInt16Array(value) {
  return whichTypedArray(value) === 'Int16Array';
}
exports.isInt16Array = isInt16Array;

function isInt32Array(value) {
  return whichTypedArray(value) === 'Int32Array';
}
exports.isInt32Array = isInt32Array;

function isFloat32Array(value) {
  return whichTypedArray(value) === 'Float32Array';
}
exports.isFloat32Array = isFloat32Array;

function isFloat64Array(value) {
  return whichTypedArray(value) === 'Float64Array';
}
exports.isFloat64Array = isFloat64Array;

function isBigInt64Array(value) {
  return whichTypedArray(value) === 'BigInt64Array';
}
exports.isBigInt64Array = isBigInt64Array;

function isBigUint64Array(value) {
  return whichTypedArray(value) === 'BigUint64Array';
}
exports.isBigUint64Array = isBigUint64Array;

function isMapToString(value) {
  return ObjectToString(value) === '[object Map]';
}
isMapToString.working = (
  typeof Map !== 'undefined' &&
  isMapToString(new Map())
);

function isMap(value) {
  if (typeof Map === 'undefined') {
    return false;
  }

  return isMapToString.working
    ? isMapToString(value)
    : value instanceof Map;
}
exports.isMap = isMap;

function isSetToString(value) {
  return ObjectToString(value) === '[object Set]';
}
isSetToString.working = (
  typeof Set !== 'undefined' &&
  isSetToString(new Set())
);
function isSet(value) {
  if (typeof Set === 'undefined') {
    return false;
  }

  return isSetToString.working
    ? isSetToString(value)
    : value instanceof Set;
}
exports.isSet = isSet;

function isWeakMapToString(value) {
  return ObjectToString(value) === '[object WeakMap]';
}
isWeakMapToString.working = (
  typeof WeakMap !== 'undefined' &&
  isWeakMapToString(new WeakMap())
);
function isWeakMap(value) {
  if (typeof WeakMap === 'undefined') {
    return false;
  }

  return isWeakMapToString.working
    ? isWeakMapToString(value)
    : value instanceof WeakMap;
}
exports.isWeakMap = isWeakMap;

function isWeakSetToString(value) {
  return ObjectToString(value) === '[object WeakSet]';
}
isWeakSetToString.working = (
  typeof WeakSet !== 'undefined' &&
  isWeakSetToString(new WeakSet())
);
function isWeakSet(value) {
  return isWeakSetToString(value);
}
exports.isWeakSet = isWeakSet;

function isArrayBufferToString(value) {
  return ObjectToString(value) === '[object ArrayBuffer]';
}
isArrayBufferToString.working = (
  typeof ArrayBuffer !== 'undefined' &&
  isArrayBufferToString(new ArrayBuffer())
);
function isArrayBuffer(value) {
  if (typeof ArrayBuffer === 'undefined') {
    return false;
  }

  return isArrayBufferToString.working
    ? isArrayBufferToString(value)
    : value instanceof ArrayBuffer;
}
exports.isArrayBuffer = isArrayBuffer;

function isDataViewToString(value) {
  return ObjectToString(value) === '[object DataView]';
}
isDataViewToString.working = (
  typeof ArrayBuffer !== 'undefined' &&
  typeof DataView !== 'undefined' &&
  isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))
);
function isDataView(value) {
  if (typeof DataView === 'undefined') {
    return false;
  }

  return isDataViewToString.working
    ? isDataViewToString(value)
    : value instanceof DataView;
}
exports.isDataView = isDataView;

// Store a copy of SharedArrayBuffer in case it's deleted elsewhere
var SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;
function isSharedArrayBufferToString(value) {
  return ObjectToString(value) === '[object SharedArrayBuffer]';
}
function isSharedArrayBuffer(value) {
  if (typeof SharedArrayBufferCopy === 'undefined') {
    return false;
  }

  if (typeof isSharedArrayBufferToString.working === 'undefined') {
    isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());
  }

  return isSharedArrayBufferToString.working
    ? isSharedArrayBufferToString(value)
    : value instanceof SharedArrayBufferCopy;
}
exports.isSharedArrayBuffer = isSharedArrayBuffer;

function isAsyncFunction(value) {
  return ObjectToString(value) === '[object AsyncFunction]';
}
exports.isAsyncFunction = isAsyncFunction;

function isMapIterator(value) {
  return ObjectToString(value) === '[object Map Iterator]';
}
exports.isMapIterator = isMapIterator;

function isSetIterator(value) {
  return ObjectToString(value) === '[object Set Iterator]';
}
exports.isSetIterator = isSetIterator;

function isGeneratorObject(value) {
  return ObjectToString(value) === '[object Generator]';
}
exports.isGeneratorObject = isGeneratorObject;

function isWebAssemblyCompiledModule(value) {
  return ObjectToString(value) === '[object WebAssembly.Module]';
}
exports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;

function isNumberObject(value) {
  return checkBoxedPrimitive(value, numberValue);
}
exports.isNumberObject = isNumberObject;

function isStringObject(value) {
  return checkBoxedPrimitive(value, stringValue);
}
exports.isStringObject = isStringObject;

function isBooleanObject(value) {
  return checkBoxedPrimitive(value, booleanValue);
}
exports.isBooleanObject = isBooleanObject;

function isBigIntObject(value) {
  return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);
}
exports.isBigIntObject = isBigIntObject;

function isSymbolObject(value) {
  return SymbolSupported && checkBoxedPrimitive(value, symbolValue);
}
exports.isSymbolObject = isSymbolObject;

function isBoxedPrimitive(value) {
  return (
    isNumberObject(value) ||
    isStringObject(value) ||
    isBooleanObject(value) ||
    isBigIntObject(value) ||
    isSymbolObject(value)
  );
}
exports.isBoxedPrimitive = isBoxedPrimitive;

function isAnyArrayBuffer(value) {
  return typeof Uint8Array !== 'undefined' && (
    isArrayBuffer(value) ||
    isSharedArrayBuffer(value)
  );
}
exports.isAnyArrayBuffer = isAnyArrayBuffer;

['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {
  Object.defineProperty(exports, method, {
    enumerable: false,
    value: function() {
      throw new Error(method + ' is not supported in userland');
    }
  });
});

},{"is-arguments":20,"is-generator-function":21,"is-typed-array":22,"which-typed-array":27}],26:[function(require,module,exports){
(function (process){(function (){
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||
  function getOwnPropertyDescriptors(obj) {
    var keys = Object.keys(obj);
    var descriptors = {};
    for (var i = 0; i < keys.length; i++) {
      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);
    }
    return descriptors;
  };

var formatRegExp = /%[sdj%]/g;
exports.format = function(f) {
  if (!isString(f)) {
    var objects = [];
    for (var i = 0; i < arguments.length; i++) {
      objects.push(inspect(arguments[i]));
    }
    return objects.join(' ');
  }

  var i = 1;
  var args = arguments;
  var len = args.length;
  var str = String(f).replace(formatRegExp, function(x) {
    if (x === '%%') return '%';
    if (i >= len) return x;
    switch (x) {
      case '%s': return String(args[i++]);
      case '%d': return Number(args[i++]);
      case '%j':
        try {
          return JSON.stringify(args[i++]);
        } catch (_) {
          return '[Circular]';
        }
      default:
        return x;
    }
  });
  for (var x = args[i]; i < len; x = args[++i]) {
    if (isNull(x) || !isObject(x)) {
      str += ' ' + x;
    } else {
      str += ' ' + inspect(x);
    }
  }
  return str;
};


// Mark that a method should not be used.
// Returns a modified function which warns once by default.
// If --no-deprecation is set, then it is a no-op.
exports.deprecate = function(fn, msg) {
  if (typeof process !== 'undefined' && process.noDeprecation === true) {
    return fn;
  }

  // Allow for deprecating things in the process of starting up.
  if (typeof process === 'undefined') {
    return function() {
      return exports.deprecate(fn, msg).apply(this, arguments);
    };
  }

  var warned = false;
  function deprecated() {
    if (!warned) {
      if (process.throwDeprecation) {
        throw new Error(msg);
      } else if (process.traceDeprecation) {
        console.trace(msg);
      } else {
        console.error(msg);
      }
      warned = true;
    }
    return fn.apply(this, arguments);
  }

  return deprecated;
};


var debugs = {};
var debugEnvRegex = /^$/;

if (process.env.NODE_DEBUG) {
  var debugEnv = process.env.NODE_DEBUG;
  debugEnv = debugEnv.replace(/[|\\{}()[\]^$+?.]/g, '\\$&')
    .replace(/\*/g, '.*')
    .replace(/,/g, '$|^')
    .toUpperCase();
  debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');
}
exports.debuglog = function(set) {
  set = set.toUpperCase();
  if (!debugs[set]) {
    if (debugEnvRegex.test(set)) {
      var pid = process.pid;
      debugs[set] = function() {
        var msg = exports.format.apply(exports, arguments);
        console.error('%s %d: %s', set, pid, msg);
      };
    } else {
      debugs[set] = function() {};
    }
  }
  return debugs[set];
};


/**
 * Echos the value of a value. Trys to print the value out
 * in the best way possible given the different types.
 *
 * @param {Object} obj The object to print out.
 * @param {Object} opts Optional options object that alters the output.
 */
/* legacy: obj, showHidden, depth, colors*/
function inspect(obj, opts) {
  // default options
  var ctx = {
    seen: [],
    stylize: stylizeNoColor
  };
  // legacy...
  if (arguments.length >= 3) ctx.depth = arguments[2];
  if (arguments.length >= 4) ctx.colors = arguments[3];
  if (isBoolean(opts)) {
    // legacy...
    ctx.showHidden = opts;
  } else if (opts) {
    // got an "options" object
    exports._extend(ctx, opts);
  }
  // set default options
  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
  if (isUndefined(ctx.depth)) ctx.depth = 2;
  if (isUndefined(ctx.colors)) ctx.colors = false;
  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
  if (ctx.colors) ctx.stylize = stylizeWithColor;
  return formatValue(ctx, obj, ctx.depth);
}
exports.inspect = inspect;


// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
inspect.colors = {
  'bold' : [1, 22],
  'italic' : [3, 23],
  'underline' : [4, 24],
  'inverse' : [7, 27],
  'white' : [37, 39],
  'grey' : [90, 39],
  'black' : [30, 39],
  'blue' : [34, 39],
  'cyan' : [36, 39],
  'green' : [32, 39],
  'magenta' : [35, 39],
  'red' : [31, 39],
  'yellow' : [33, 39]
};

// Don't use 'blue' not visible on cmd.exe
inspect.styles = {
  'special': 'cyan',
  'number': 'yellow',
  'boolean': 'yellow',
  'undefined': 'grey',
  'null': 'bold',
  'string': 'green',
  'date': 'magenta',
  // "name": intentionally not styling
  'regexp': 'red'
};


function stylizeWithColor(str, styleType) {
  var style = inspect.styles[styleType];

  if (style) {
    return '\u001b[' + inspect.colors[style][0] + 'm' + str +
           '\u001b[' + inspect.colors[style][1] + 'm';
  } else {
    return str;
  }
}


function stylizeNoColor(str, styleType) {
  return str;
}


function arrayToHash(array) {
  var hash = {};

  array.forEach(function(val, idx) {
    hash[val] = true;
  });

  return hash;
}


function formatValue(ctx, value, recurseTimes) {
  // Provide a hook for user-specified inspect functions.
  // Check that value is an object with an inspect function on it
  if (ctx.customInspect &&
      value &&
      isFunction(value.inspect) &&
      // Filter out the util module, it's inspect function is special
      value.inspect !== exports.inspect &&
      // Also filter out any prototype objects using the circular check.
      !(value.constructor && value.constructor.prototype === value)) {
    var ret = value.inspect(recurseTimes, ctx);
    if (!isString(ret)) {
      ret = formatValue(ctx, ret, recurseTimes);
    }
    return ret;
  }

  // Primitive types cannot have properties
  var primitive = formatPrimitive(ctx, value);
  if (primitive) {
    return primitive;
  }

  // Look up the keys of the object.
  var keys = Object.keys(value);
  var visibleKeys = arrayToHash(keys);

  if (ctx.showHidden) {
    keys = Object.getOwnPropertyNames(value);
  }

  // IE doesn't make error fields non-enumerable
  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
  if (isError(value)
      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
    return formatError(value);
  }

  // Some type of object without properties can be shortcutted.
  if (keys.length === 0) {
    if (isFunction(value)) {
      var name = value.name ? ': ' + value.name : '';
      return ctx.stylize('[Function' + name + ']', 'special');
    }
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    }
    if (isDate(value)) {
      return ctx.stylize(Date.prototype.toString.call(value), 'date');
    }
    if (isError(value)) {
      return formatError(value);
    }
  }

  var base = '', array = false, braces = ['{', '}'];

  // Make Array say that they are Array
  if (isArray(value)) {
    array = true;
    braces = ['[', ']'];
  }

  // Make functions say that they are functions
  if (isFunction(value)) {
    var n = value.name ? ': ' + value.name : '';
    base = ' [Function' + n + ']';
  }

  // Make RegExps say that they are RegExps
  if (isRegExp(value)) {
    base = ' ' + RegExp.prototype.toString.call(value);
  }

  // Make dates with properties first say the date
  if (isDate(value)) {
    base = ' ' + Date.prototype.toUTCString.call(value);
  }

  // Make error with message first say the error
  if (isError(value)) {
    base = ' ' + formatError(value);
  }

  if (keys.length === 0 && (!array || value.length == 0)) {
    return braces[0] + base + braces[1];
  }

  if (recurseTimes < 0) {
    if (isRegExp(value)) {
      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
    } else {
      return ctx.stylize('[Object]', 'special');
    }
  }

  ctx.seen.push(value);

  var output;
  if (array) {
    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
  } else {
    output = keys.map(function(key) {
      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
    });
  }

  ctx.seen.pop();

  return reduceToSingleString(output, base, braces);
}


function formatPrimitive(ctx, value) {
  if (isUndefined(value))
    return ctx.stylize('undefined', 'undefined');
  if (isString(value)) {
    var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
                                             .replace(/'/g, "\\'")
                                             .replace(/\\"/g, '"') + '\'';
    return ctx.stylize(simple, 'string');
  }
  if (isNumber(value))
    return ctx.stylize('' + value, 'number');
  if (isBoolean(value))
    return ctx.stylize('' + value, 'boolean');
  // For some reason typeof null is "object", so special case here.
  if (isNull(value))
    return ctx.stylize('null', 'null');
}


function formatError(value) {
  return '[' + Error.prototype.toString.call(value) + ']';
}


function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
  var output = [];
  for (var i = 0, l = value.length; i < l; ++i) {
    if (hasOwnProperty(value, String(i))) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          String(i), true));
    } else {
      output.push('');
    }
  }
  keys.forEach(function(key) {
    if (!key.match(/^\d+$/)) {
      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
          key, true));
    }
  });
  return output;
}


function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
  var name, str, desc;
  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
  if (desc.get) {
    if (desc.set) {
      str = ctx.stylize('[Getter/Setter]', 'special');
    } else {
      str = ctx.stylize('[Getter]', 'special');
    }
  } else {
    if (desc.set) {
      str = ctx.stylize('[Setter]', 'special');
    }
  }
  if (!hasOwnProperty(visibleKeys, key)) {
    name = '[' + key + ']';
  }
  if (!str) {
    if (ctx.seen.indexOf(desc.value) < 0) {
      if (isNull(recurseTimes)) {
        str = formatValue(ctx, desc.value, null);
      } else {
        str = formatValue(ctx, desc.value, recurseTimes - 1);
      }
      if (str.indexOf('\n') > -1) {
        if (array) {
          str = str.split('\n').map(function(line) {
            return '  ' + line;
          }).join('\n').substr(2);
        } else {
          str = '\n' + str.split('\n').map(function(line) {
            return '   ' + line;
          }).join('\n');
        }
      }
    } else {
      str = ctx.stylize('[Circular]', 'special');
    }
  }
  if (isUndefined(name)) {
    if (array && key.match(/^\d+$/)) {
      return str;
    }
    name = JSON.stringify('' + key);
    if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
      name = name.substr(1, name.length - 2);
      name = ctx.stylize(name, 'name');
    } else {
      name = name.replace(/'/g, "\\'")
                 .replace(/\\"/g, '"')
                 .replace(/(^"|"$)/g, "'");
      name = ctx.stylize(name, 'string');
    }
  }

  return name + ': ' + str;
}


function reduceToSingleString(output, base, braces) {
  var numLinesEst = 0;
  var length = output.reduce(function(prev, cur) {
    numLinesEst++;
    if (cur.indexOf('\n') >= 0) numLinesEst++;
    return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
  }, 0);

  if (length > 60) {
    return braces[0] +
           (base === '' ? '' : base + '\n ') +
           ' ' +
           output.join(',\n  ') +
           ' ' +
           braces[1];
  }

  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
}


// NOTE: These type checking functions intentionally don't use `instanceof`
// because it is fragile and can be easily faked with `Object.create()`.
exports.types = require('./support/types');

function isArray(ar) {
  return Array.isArray(ar);
}
exports.isArray = isArray;

function isBoolean(arg) {
  return typeof arg === 'boolean';
}
exports.isBoolean = isBoolean;

function isNull(arg) {
  return arg === null;
}
exports.isNull = isNull;

function isNullOrUndefined(arg) {
  return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;

function isNumber(arg) {
  return typeof arg === 'number';
}
exports.isNumber = isNumber;

function isString(arg) {
  return typeof arg === 'string';
}
exports.isString = isString;

function isSymbol(arg) {
  return typeof arg === 'symbol';
}
exports.isSymbol = isSymbol;

function isUndefined(arg) {
  return arg === void 0;
}
exports.isUndefined = isUndefined;

function isRegExp(re) {
  return isObject(re) && objectToString(re) === '[object RegExp]';
}
exports.isRegExp = isRegExp;
exports.types.isRegExp = isRegExp;

function isObject(arg) {
  return typeof arg === 'object' && arg !== null;
}
exports.isObject = isObject;

function isDate(d) {
  return isObject(d) && objectToString(d) === '[object Date]';
}
exports.isDate = isDate;
exports.types.isDate = isDate;

function isError(e) {
  return isObject(e) &&
      (objectToString(e) === '[object Error]' || e instanceof Error);
}
exports.isError = isError;
exports.types.isNativeError = isError;

function isFunction(arg) {
  return typeof arg === 'function';
}
exports.isFunction = isFunction;

function isPrimitive(arg) {
  return arg === null ||
         typeof arg === 'boolean' ||
         typeof arg === 'number' ||
         typeof arg === 'string' ||
         typeof arg === 'symbol' ||  // ES6 symbol
         typeof arg === 'undefined';
}
exports.isPrimitive = isPrimitive;

exports.isBuffer = require('./support/isBuffer');

function objectToString(o) {
  return Object.prototype.toString.call(o);
}


function pad(n) {
  return n < 10 ? '0' + n.toString(10) : n.toString(10);
}


var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
              'Oct', 'Nov', 'Dec'];

// 26 Feb 16:19:34
function timestamp() {
  var d = new Date();
  var time = [pad(d.getHours()),
              pad(d.getMinutes()),
              pad(d.getSeconds())].join(':');
  return [d.getDate(), months[d.getMonth()], time].join(' ');
}


// log is just a thin wrapper to console.log that prepends a timestamp
exports.log = function() {
  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
};


/**
 * Inherit the prototype methods from one constructor into another.
 *
 * The Function.prototype.inherits from lang.js rewritten as a standalone
 * function (not on Function.prototype). NOTE: If this file is to be loaded
 * during bootstrapping this function needs to be rewritten using some native
 * functions as prototype setup using normal JavaScript does not work as
 * expected during bootstrapping (see mirror.js in r114903).
 *
 * @param {function} ctor Constructor function which needs to inherit the
 *     prototype.
 * @param {function} superCtor Constructor function to inherit prototype from.
 */
exports.inherits = require('inherits');

exports._extend = function(origin, add) {
  // Don't do anything if add isn't an object
  if (!add || !isObject(add)) return origin;

  var keys = Object.keys(add);
  var i = keys.length;
  while (i--) {
    origin[keys[i]] = add[keys[i]];
  }
  return origin;
};

function hasOwnProperty(obj, prop) {
  return Object.prototype.hasOwnProperty.call(obj, prop);
}

var kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;

exports.promisify = function promisify(original) {
  if (typeof original !== 'function')
    throw new TypeError('The "original" argument must be of type Function');

  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {
    var fn = original[kCustomPromisifiedSymbol];
    if (typeof fn !== 'function') {
      throw new TypeError('The "util.promisify.custom" argument must be of type Function');
    }
    Object.defineProperty(fn, kCustomPromisifiedSymbol, {
      value: fn, enumerable: false, writable: false, configurable: true
    });
    return fn;
  }

  function fn() {
    var promiseResolve, promiseReject;
    var promise = new Promise(function (resolve, reject) {
      promiseResolve = resolve;
      promiseReject = reject;
    });

    var args = [];
    for (var i = 0; i < arguments.length; i++) {
      args.push(arguments[i]);
    }
    args.push(function (err, value) {
      if (err) {
        promiseReject(err);
      } else {
        promiseResolve(value);
      }
    });

    try {
      original.apply(this, args);
    } catch (err) {
      promiseReject(err);
    }

    return promise;
  }

  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));

  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {
    value: fn, enumerable: false, writable: false, configurable: true
  });
  return Object.defineProperties(
    fn,
    getOwnPropertyDescriptors(original)
  );
}

exports.promisify.custom = kCustomPromisifiedSymbol

function callbackifyOnRejected(reason, cb) {
  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).
  // Because `null` is a special error value in callbacks which means "no error
  // occurred", we error-wrap so the callback consumer can distinguish between
  // "the promise rejected with null" or "the promise fulfilled with undefined".
  if (!reason) {
    var newReason = new Error('Promise was rejected with a falsy value');
    newReason.reason = reason;
    reason = newReason;
  }
  return cb(reason);
}

function callbackify(original) {
  if (typeof original !== 'function') {
    throw new TypeError('The "original" argument must be of type Function');
  }

  // We DO NOT return the promise as it gives the user a false sense that
  // the promise is actually somehow related to the callback's execution
  // and that the callback throwing will reject the promise.
  function callbackified() {
    var args = [];
    for (var i = 0; i < arguments.length; i++) {
      args.push(arguments[i]);
    }

    var maybeCb = args.pop();
    if (typeof maybeCb !== 'function') {
      throw new TypeError('The last argument must be of type Function');
    }
    var self = this;
    var cb = function() {
      return maybeCb.apply(self, arguments);
    };
    // In true node style we process the callback on `nextTick` with all the
    // implications (stack, `uncaughtException`, `async_hooks`)
    original.apply(this, args)
      .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },
            function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });
  }

  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));
  Object.defineProperties(callbackified,
                          getOwnPropertyDescriptors(original));
  return callbackified;
}
exports.callbackify = callbackify;

}).call(this)}).call(this,require('_process'))
},{"./support/isBuffer":24,"./support/types":25,"_process":23,"inherits":19}],27:[function(require,module,exports){
(function (global){(function (){
'use strict';

var forEach = require('foreach');
var availableTypedArrays = require('available-typed-arrays');
var callBound = require('call-bind/callBound');

var $toString = callBound('Object.prototype.toString');
var hasSymbols = require('has-symbols')();
var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';

var typedArrays = availableTypedArrays();

var $slice = callBound('String.prototype.slice');
var toStrTags = {};
var gOPD = require('es-abstract/helpers/getOwnPropertyDescriptor');
var getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');
if (hasToStringTag && gOPD && getPrototypeOf) {
	forEach(typedArrays, function (typedArray) {
		if (typeof global[typedArray] === 'function') {
			var arr = new global[typedArray]();
			if (!(Symbol.toStringTag in arr)) {
				throw new EvalError('this engine has support for Symbol.toStringTag, but ' + typedArray + ' does not have the property! Please report this.');
			}
			var proto = getPrototypeOf(arr);
			var descriptor = gOPD(proto, Symbol.toStringTag);
			if (!descriptor) {
				var superProto = getPrototypeOf(proto);
				descriptor = gOPD(superProto, Symbol.toStringTag);
			}
			toStrTags[typedArray] = descriptor.get;
		}
	});
}

var tryTypedArrays = function tryAllTypedArrays(value) {
	var foundName = false;
	forEach(toStrTags, function (getter, typedArray) {
		if (!foundName) {
			try {
				var name = getter.call(value);
				if (name === typedArray) {
					foundName = name;
				}
			} catch (e) {}
		}
	});
	return foundName;
};

var isTypedArray = require('is-typed-array');

module.exports = function whichTypedArray(value) {
	if (!isTypedArray(value)) { return false; }
	if (!hasToStringTag) { return $slice($toString(value), 8, -1); }
	return tryTypedArrays(value);
};

}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
},{"available-typed-arrays":4,"call-bind/callBound":7,"es-abstract/helpers/getOwnPropertyDescriptor":9,"foreach":11,"has-symbols":15,"is-typed-array":22}]},{},[1]);
